我的两个回调方法都包含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
答案 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