ruby-on-rails – Rails – 创建回调和嵌套属性后的执行顺序
用户has_one:user_profile和UserProfile belongs_to:user可以简单的设置User和UserProfile模型.
但是我无法围绕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: class User < ActiveRecord::Base after_create :test_test has_one :user_profile accepts_nested_attributes_for :user_profile end 在创建用户之后但在创建用户配置文件之前触发回调. 这是预期的功能. Rails在内部做什么?执行顺序是否由代码的顺序决定? 我在哪里开始深入挖掘或调试? 解决方法
模型中声明的顺序可能会影响代码的执行顺序.这是各种奇怪的事情的来源. (例如,当前的回调定义和has_and_belongs_to_many关联是依赖于顺序的:
https://github.com/rails/rails/pull/8674)
要调试问题,您需要浏览rails源.由于您的问题与执行顺序,回调和嵌套属性有关,我将首先阅读: > https://github.com/rails/rails/blob/master/activerecord/lib/active_record/nested_attributes.rb#L256 这给你深入挖掘的必要背景.你会注意到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回调,就我所知,回调按照定义的顺序执行. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 工具使用-------notepad++正则表达式替换字符串详解
- jsonstore异步load与filter筛选结合使用时的问题
- 5 个免费的受欢迎的 SQLite 管理工具
- Swift 2.0学习笔记(Day 10)——运算符是“ +、-、*、/ ”
- 通过WIFI将文件从iPhone应用程序导出到计算机 –
- ruby – 如何获取已安装的具有本机扩展名的gem列表?
- Oracle Grid Infrastructure: Understanding Split-Brain N
- c# – TinyMCE编辑器:从客户端检测到一个潜在危险的Reques
- ruby-on-rails – rails中的MiniTest教程
- Ajax工作原理