Userと UserProfileを使用したモデルの簡単なセットアップがUserあります。UserProfilehas_one :user_profilebelongs_to :user
しかし、Rails がafter_createコールバックの実行順序をaccepts_nested_attributes_for定義し、モデルで定義する方法について頭を悩ませることはできません。この2つのケースを考えてみましょう。
ケース 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は内部的に何をしますか? 実行順序は単純にコードの順番で決まるのでしょうか?
これをさらに深く掘り下げたり、デバッグしたりするには、どこから始めればよいですか?