我有一个简单的设置User
和UserProfile
模型与用户has_one :user_profile
和UserProfile belongs_to :user
。Rails - 创建回调后的执行顺序和嵌套属性
但是我无法围绕我的模型中定义的定义after_create
回调和accepts_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在内部做了什么?执行顺序是否仅由代码的顺序决定?
我该从哪里开始深入或调试呢?
我会再次测试这个,回调形式的代码顺序与执行顺序无关。 – Rabbott 2012-03-15 05:37:59
@Rabbott - 我明白了! – prasvin 2012-03-15 06:12:14
使用'inverse_of'可能有助于解决依赖关系并在创建或保存时保存问题。例如'has_one:user_profile,inverse_of :: user' – ybart 2017-08-03 09:16:29