如果存在重复项,我正在尝试更新rails记录,如下所示:
class Rating < ActiveRecord::Base
before_create :update_rating_if_already_exists
def update_rating_if_already_exists
original_rating = Rating.where(user: self.user, article: self.article)
if original_rating.blank?
true
else
original_rating[0].update_attribute(:score, self.score)
false
end
end
end
然而问题是,当我使用上面的after_create
时,这对于控制器动作的正常使用不起作用,因为控制器将首先用给定的参数构建一个新的类实例然后{{1 (不是save
)新对象。
但是,如果我将上面的内容更改为create
,它会解决控制器问题,但会导致另一个问题:
after_save
将尝试使用original_rating[0].update_attribute(:score, self.score)
方法更新原始记录,这也会触发save
...以及on和on ...这会导致before_save
错误。
现在这就是困境,我的问题是我怎么能这样做呢?
感谢所有的贡献。 :)
答案 0 :(得分:0)
您可以NameValuePair
使用id
条件,以避免在before_save
来电时执行回调。
new_record?