0

保存する前に別の関連するテーブルを更新しようとしていますが、よく知らないエラーが発生しています...

だから私は私のモデルにあります

post.rb

  before_save :update_total_items

  def update_total_items
    b = Tags.find(:tag_id => self.tag_id)
    b.total_items = b.total_items+1
    b.save
  end

しかし、私はエラーが発生します

Unknown key tag_id

それで、それを使用して別のテーブルに関連付けられている既存のものを更新するために、保存する前に追加しているプロパティにアクセスするにはどうすればよいですか?

4

2 に答える 2

2

通常、idモデルのはそれと呼ばれます。一般的にあなたが望むものは次のとおりです。

b = Tags.find(self.tag_id)

レコードが見つからなかった場合、これによりActiveRecord::RecordNotFound例外がスローされる可能性があることに注意してください。より安全なアプローチは次のとおりです。

if (b = Tags.where(:id => self.tag_id).first)
  b.increment!(:total_items)
end

値をインクリメントするためのロードと保存は避けてください。カウントを失うという醜い競合状態になってしまう可能性があります。

注意として、モデルがと呼ばれるのは非常に不規則ですTags。と呼ばれるべきTagです。

于 2012-08-22T17:40:13.197 に答える
1

Postオブジェクトに外部キーtag_idがない場合は、次のように変更します

  b = self.tags.find(:post_id => self.id)

これは、Post has_many:tags、およびTagbelongs_to:postを想定しています。

@tadmanに同意します。増分メソッド、increment(attribute、by = 1)を使用する必要があります。

于 2012-08-22T17:39:37.340 に答える