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启动两次