これは真剣にrails
初心者です。before_save
親を作成するときに has_many レコードの書き込みを制御するためにモデルでandフックを使用できることはafter_save
わかっていますが、その子レコードで作成したい値を渡す方法がわかりません。
has_many memberships
私のシナリオでは、学校へのユーザーです。現在、ユーザーを作成するとmembership
、正しい初期値を持たない空白のレコードが作成されます。初期化時に has_many レコードに挿入する必要がある値をユーザーに渡すにはどうすればよいですか?
私が行っているのは、ユーザーの後にメンバーシップ レコードを手動で作成することですが、これにより、2 つのメンバーシップが得られます。
class User
has_many :memberships
has_many :group_user_memberships
has_many :schools, through: :memberships
#creates a membership with nil values in some fields
@user = create(user_type)
#creates the correct, but secondary memberhsip
member = @user.memberships.create(school_id: school.id, role_id: role.id)
私がやりたくないのは、ユーザーを作成し、メンバーシップIDを見つけてから、メンバーシップのschool_idを更新する必要があることSQL
です。そのユーザーのために作成されたばかりです。
school_id
私のユーザーはメンバーシップを通じて学校と関係を持っているため、をユーザーに渡す方法を見つけて、nested_attributes
挿入する方法を見つけたいと思っていましたschool_id
私が望むのは、ユーザーの作成時に学校と役割を入力し、これらにメンバーシップ レコードを作成させることです。これはフックに関連していると思いますbefore/after
が、最善の解決策を知りたいです
前もって感謝します
編集
これは、Factory Girl を使用してテストで使用するコードです。たぶんこれは質問の一部です-レールコンソールを使用すると、これが得られます u = User.create(:firstname => "Dsd", :surname => "", :email => "aa@sdd.com" ) u.confirm!
メンバーシップなしでユーザー SQL 挿入を取得します (または、少なくともログにメンバーシップ INSERT が表示されません)
INSERT INTO `users` (`active`, `confirma..... etc
私のテストでは、Factory Girl を使用してメンバーシップを取得しました。これはファクトリーガールかもしれませんが、ファクトリーのどこでメンバーシップを取得しているのかわかりません. これが私のユーザーファクトリーです
FactoryGirl.define do
factory :user do
sequence(:email){ |n| "user#{n}@example.com".downcase }
firstname "MyString"
surname "MyString"
password "a1234567"
active false
factory :an_administrator do
after(:create){|a| a.roles << create(:admin_role)}
end
factory :a_pupil do
after(:create){|a| a.roles << create(:pupil_role)}
end
end
end
そして私の役割工場
FactoryGirl.define do
factory :role do
factory :admin_role do |f|
name 'administrator'
end
factory :pupil_role do |f|
name 'pupil'
end
end
end
はい、これは Factory Girl だと思います - user_with_school_membership を作成することがおそらく答えになるでしょうか?