我发现我的Projelement
after_update
回调触发了两次,因为我保存了Projelement
两次(previous question):
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
所以我想做两件事:
Projelement
的属性Projelement
以标记当前用户已阅读将它们分开会创建两个after_update
回调调用,这不是我想要的。
最好的方法是使after_update
只触发一次?
答案 0 :(得分:3)
最干净的解决方案是进行单次保存/更新并让模型担心分配read_by,这样:
@milestone = Milestone.find(params[:id])
@milestone.attributes = params[:milestone]
@milestone.set_read_by(current_user)
# the .save will be the only db transaction
if @milestone.save
#...
else
#...
end
def set_read_by(user)
read_by.clear
read_by << user
end