回调冲突

时间:2011-09-25 01:38:54

标签: ruby-on-rails activerecord

我的两个回调方法都包含update_attributes。所以看起来当calculate_rating运行时它也调用modify_rating。我只希望calculate_rating运行以创建新记录,而modify_rating仅在通过表单编辑和更新记录时运行。

     after_create :calculate_rating
     before_update :modify_rating


      def calculate_rating
      end

      def modify_rating
      end

1 个答案:

答案 0 :(得分:0)

来自fine manual for update_attributes

  

从传入的哈希中更新模型的属性并保存记录[...]

因此,当您调用update_attributes时,它会尝试保存对象,这意味着update_attributes不适合您正在使用的任何一个回调;控制器可以使用update_attributes来进行质量分配等。

您可以使用简单的作业替换update_attributes来电:

def calculate_rating
    self.attr1 = 11
    self.attr2 = 23
    #...
end