after_update在哪里调用两次?
我的模型Projelement
有这些回调:
after_create { |p| p.log_activity "created" } after_update { |p| p.log_activity "updated" }
而Projelement.log_activity
看起来像:
# create new Activity object # point it to the project & projelement @a = Activity.new @a.projelement = self @a.project = self.project # record the type of activity case op_type when "created" @a.operation = "created" when "deleted" @a.operation = "deleted" when "updated" @a.operation = "updated" end @a.save
因此,当创建一个Projelement
时,一切都很好:
-
created
类型的一个Activity
记录
但是当更新Projelement
时,我得到:
- 两个重复
updated
类型的Activity
记录 - 相同的时间戳
可以在某处调用after_update
回调两次吗?
ps当保存Projelement
时,它看起来像这样( Milestone
是一个Projelement
):
def update @milestone = Milestone.find(params[:id]) respond_to do |format| if @milestone.update_attributes(params[:milestone]) # flag that current_user has this milestone @milestone.read_by.clear @milestone.read_by << current_user @milestone.save ... end end end
感谢@ frederick-cheung和@pjumble:
在update
方法中,正在更新Projelement
实例:
- 正在调用
update_attributes
- 然后调用
save
所以after_update
回调每个Projelement
启动两次