0

テーブルにcount列がありtagsます。更新中にタグが投稿に追加されたばかりで、すでにdb内にある場合は、タグ数を増やしたいと思います。私はこれを私の投稿モデルに追加しました:

before_update :increment_tag

def increment_tag
  db_post = Post.find_by_id(self)
  self.tags.each do |tag|
    unless db_post.tags.include? tag
      tag.update_attribute("count", tag.count + 1)
    end
  end
end

dbから投稿を取得し、現在のタグがすでにdbにあるかどうかをテストします。ある場合は何も起こりません。ない場合は、カウントフィールドを更新する必要があります。しかし、何らかの理由でこれは機能しません。

4

1 に答える 1

2

タグに[カウント]列を含めないでください。代わりに、次のことができるようにモデルを適切に設定する必要があります。

db_post.tags.count

あなたがそれを正しく行うならば、あなたはあなたのタグでこれを得ることができます:

tag.post.tags.count

タグが投稿で使用されている回数を合計で見つけることが目的の場合は、TagToPostColumn(取得している場合)のインスタンスを数えるだけで済みます。これは多対多の関係です。 。

次に、次のことを行います。

TagToPostColumn.where(tag_id:someTag.id).count

countは標準属性であり、データベースにあるモデル以外のものを追跡するcountという列が実際に必要な場合を除いて、これを自分で追跡する必要はありません。ただし、属性があいまいになる可能性があるため、カウント以外の名前を付けることをお勧めします。

また、私はあなたがこれをしているのは非常に奇妙だと思います:

db_post = Post.find_by_id(self)

すでに持っている投稿を見つけるためにdbルックアップを実行する代わりに、なぜselfパラメーターを使用しないのですか。

于 2012-07-29T13:42:36.290 に答える