Моя модель 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
обратный вызов вызываться где-то дважды?
пс, когда 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