我正在尝试在保存之前更新另一个关联的表,但我遇到错误我不熟悉...
所以我的模特
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
那么我如何在保存之前访问我要添加的属性以便使用它并更新另一个表上的现有关联?
答案 0 :(得分: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
。
答案 1 :(得分:1)
Post对象没有外键tag_id,将其更改为
b = self.tags.find(:post_id => self.id)
这是假设Post has_many:标签,以及Tag belongs_to:post
我同意@tadman你应该使用增量方法, increment(attribute,by = 1)