Ответ 1
Порядок объявлений в вашей модели может повлиять на порядок выполнения кода. Это источник для разных странных вещей. (например, в настоящее время определения обратного вызова и ассоциации has_and_belongs_to_many зависят от порядка: https://github.com/rails/rails/pull/8674)
Чтобы отладить проблему, вам нужно просмотреть источник рельсов. Поскольку ваша проблема связана с порядком выполнения, обратными вызовами и вложенными атрибутами, я начинал с чтения:
- https://github.com/rails/rails/blob/master/activerecord/lib/active_record/nested_attributes.rb#L256
- https://github.com/rails/rails/blob/master/activerecord/lib/active_record/callbacks.rb#L302
- https://github.com/rails/rails/blob/master/activemodel/lib/active_model/callbacks.rb#L98
Это дает вам необходимый фон, чтобы копать глубже. Вы заметите, что accepts_nested_attributes_for
вызывает add_autosave_association_callbacks
https://github.com/rails/rails/blob/master/activerecord/lib/active_record/autosave_association.rb#L173
Этот метод добавляет обратный вызов after_create
, и насколько я знаю, обратные вызовы выполняются в порядке определения.