Использование ActiveRecord для вызова after_save обратного вызова, каждый раз сохраняет метод, называют, даже если модель не была изменена, и никакие не вставляют/запрос на обновление порожденный.
Это - поведение по умолчанию на самом деле. И это в порядке в большинстве случаев.
Но некоторые after_save обратные вызовы чувствительны к вещи это, если модель была на самом деле сохранена или нет.
Существует ли способ определить, была ли модель на самом деле сохранена в after_save?
Я выполняю следующий тестовый код:
class Stage < ActiveRecord::Base
after_save do
pp changes
end
end
s = Stage.first
s.name = "q1"
s.save!
ActiveRecord используется для вызова обратного вызова after_save каждый раз, когда вызывается метод сохранения , даже если модель не была {{1} } изменено, и запрос на вставку / обновление не создавался.
ActiveRecord выполняет обратные вызовы after_save каждый раз, когда запись успешно сохраняется, независимо от того, была ли она изменена.
# record invalid, after_save not triggered
Record.new.save
# record valid, after_save triggered
r = Record.new(:attr => value)
# record valid and not changed, after_save triggered
r.save
Вы хотите знать, была ли изменена запись, а не сохранена ли она.
Вы можете легко сделать это, используя record.changed?
class Record
after_save :do_something_if_changed
protected
def do_something_if_changed
if changed?
# ...
end
end
end