Rails ActiveRecord回调困境

时间:2015-08-20 02:28:04

标签: ruby-on-rails activerecord callback

如果存在重复项,我正在尝试更新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错误。

现在这就是困境,我的问题是我怎么能这样做呢?

感谢所有的贡献。 :)

1 个答案:

答案 0 :(得分:0)

您可以NameValuePair使用id条件,以避免在before_save来电时执行回调。

new_record?