activerecord - Rails: Pass parameters for child record when creating parent -


this rails newbie. know can use before_save , after_save hooks in model control writing has_many record when create parent, don't know how pass values want created in child record.

in scenario, user has_many memberships schools. @ moment, when create user, creates blank membership record doesn't have correct initial values. how pass user values needs insert has_many record @ init?

what have been doing manually creating membership record after user, gives me 2 memberships, 1 correct field values, 1 initial "nil" values, , manually created record.i.e. in test

class user   has_many :memberships   has_many :group_user_memberships   has_many :schools, through: :memberships      #creates  membership nil values in fields    @user = create(user_type)    #creates correct, secondary memberhsip    member = @user.memberships.create(school_id: school.id, role_id: role.id) 

what don't want have create user, find membership id , update school_id in membership a) many sql operations , b) there no way of getting correct record created user.

because user has relationship schools through memberships, hoping able find way of passing school_id user , nested_attributes insert school_id

what want, populate school , role when user created, , have these create membership record. think related before/after hooks, love know best solution

thanks in advance

edit

so, code use in test, using factory girl. maybe part of question - if use rails console, u = user.create(:firstname => "dsd", :surname => "", :email => "aa@sdd.com") u.confirm!

i user sql insert without membership (or @ least log shows no membership insert)

insert `users` (`active`, `confirma..... etc 

in test, using factory girl, membership. maybe factory girl, can't see in factory membership. here user factory

factorygirl.define   factory :user sequence(:email){ |n| "user#{n}@example.com".downcase }     firstname "mystring"     surname "mystring"     password "a1234567"     active false      factory :an_administrator       after(:create){|a| a.roles << create(:admin_role)}     end     factory :a_pupil        after(:create){|a| a.roles << create(:pupil_role)}     end   end end 

and role factory

factorygirl.define   factory :role     factory :admin_role |f|       name 'administrator'      end       factory :pupil_role |f|       name 'pupil'     end   end end 

so yes, guess factory girl - creating user_with_school_membership might answser perhaps?


Comments