但是我无法围绕Rails如何定义在我的模型中定义的after_create回调和accept_nested_attributes_for的执行顺序.让我们考虑这两种情况.
情况1:
class User < ActiveRecord::Base has_one :user_profile accepts_nested_attributes_for :user_profile after_create :test_test end
现在,如果我通过控制台创建一个用户(具有user_profile_attributes哈希),则在创建用户及其用户配置文件后触发after_create回调.
情况2:
如果after_create放在顶部,
class User < ActiveRecord::Base after_create :test_test has_one :user_profile accepts_nested_attributes_for :user_profile end
这是预期的功能. Rails在内部做什么?执行顺序是否由代码的顺序决定?
我在哪里开始深入挖掘或调试?
解决方法
要调试问题,您需要浏览rails源.由于您的问题与执行顺序,回调和嵌套属性有关,我将首先阅读:
> 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
这给你深入挖掘的必要背景.你会注意到accept_nested_attributes_for调用add_autosave_association_callbacks https://github.com/rails/rails/blob/master/activerecord/lib/active_record/autosave_association.rb#L173这个方法添加了一个after_create回调,就我所知,回调按照定义的顺序执行.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。