Я не использовал changes
метод. Но я уверен, что вы всегда можете использовать магические методы <attribute_name>_changed?
и <attribute_name>_was
:
services.any? {|s| s.attribute_name_changed?}
services.map(&:attribute_name_was)
См. Railscast Райана Бейтса для получения дополнительной информации: # 109 эпизод
ОБНОВЛЕНИЕ : Вы можете передать :after_delete
и :after_add
обратные вызовы в has_many
связь напрямую:
has_many :items, :after_add => :my_method_or_proc1, :after_remove => :my_method_or_proc2
Будьте осторожны при использовании этих обратных вызовов и обратите внимание, как они работают. Они
Вызываются items.build
и items.create
один раз . Так что если вы позвоните
items.build
, а затем сохранить родительский объект (с вложенными атрибутами для
пример) after_add
callback будет вызываться только один раз при сборке
связанный объект . Это означает, что если родитель имеет проверку, то встроенный items
не будет сохранен в базе данных, и вы не сможете положиться на обратный вызов after_add
. Другими словами, это не говорит о том, что добавленная запись ассоциации была сохранена в БД. Таким образом, вы гарантируете, что элемент добавляется и сохраняется только по вызову items.create
. Я надеюсь, вы понимаете это разъяснение.