Проблема с ответом Joris заключается в том, что он подключается к цепочке alias_method_chain
, отключая все цепочки, выполненные после (например, update_with_callbacks
, что объясняет проблемы с триггерами, которые не были вызваны).Я постараюсь сделать диаграмму, чтобы ее было легче понять.
Вы можете начать с цепочки, подобной этой
update -> update_with_foo -> update_with_bar -> update_with_baz
Обратите внимание, что update_without_foo
указывает на update_with_bar
и update_without_bar
на update_with_baz
Поскольку вы можетеНе изменяйте update_with_bar
в соответствии с внутренней работой alias_method_chain
, вы можете попытаться подключиться к цепочке, добавив новую ссылку (bar2) и вызвав update_without_bar, поэтому:
alias_method_chain :update, :bar2
К сожалению, это будетвы получите следующую цепочку:
update -> update_with_bar2 -> update_with_baz
Итак, update_with_foo больше не существует!
Итак, зная, что alias_method_chain
не позволит вам переопределить _with
методы, мое решение до сих пор былопереопределить update_without_dirty
и сделать там выбор атрибутов.