ユーザーにユーザーの詳細プロフィールがぶら下がってるような1対1のモデル(DB設計)
models/user.rb
class User < ActiveRecord::Base
has_one :profile, class_name: 'UserProfile', dependent: :destroy, inverse_of: :user
after_create do |record|
UserProfile.create(user: record)
end
# (略)
ユーザに対して、詳細プロフィールをafter_createでプロフィールを生成するときのFactoryGirl
spec/factories/user.rb
FactoryGirl.define do
factory :user do
# (略)
after(:create) do |user|
profile = UserProfile.find_by(user: user)
profile.update!(attributes_for(:user_profile))
end
end
end
associationで書くとmodel本体のafter_createが走ってしまうので、
一旦after_createで生成してから、profileのattributeをupdateで埋めています。