after_update在哪里调用两次?

时间:2012-03-31 22:15:31

标签: ruby-on-rails callback

我的模型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时,一切都很好:

  • Activity类型
  • 的一个created记录

但是当更新Projelement时,我得到:

  • Activity类型
  • 的两个重复updated条记录
  • 相同的时间戳

可以在某处调用after_update回调两次吗?

P.S。保存Projelement时,它看起来像这样(MilestoneProjelement):

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

1 个答案:

答案 0 :(得分:2)

感谢@ frederick-cheung和@pjumble:

update方法中,Projelement实例正在更新中:

  • update_attributes被称为
  • 然后调用save

所以after_update回调每Projelement

启动两次