0

I am trying to update another associated table before saving but i am getting into errors i am not familiar with...

so i have in my model

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

but i get an error

Unknown key tag_id

so how can i access the property i am adding before i save it in order to use it and update an existing associated on another table?

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 和 Tag belongs_to :post

我同意@tadman 你应该使用增量方法,increment(attribute, by = 1)

于 2012-08-22T17:39:37.340 回答