Ruby on rails Rails:在创建父记录时传递子记录的参数

Ruby on rails Rails:在创建父记录时传递子记录的参数,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,这真是个新手。我知道我可以在我的模型中使用保存前和保存后挂钩来控制创建父记录时写入has\u many记录,但我不知道如何传递希望在该子记录中创建的值 在我的场景中,一个用户拥有许多学校会员资格。目前,当我创建一个用户时,它会创建一个空白的成员资格记录,该记录没有正确的初始值。如何向用户传递需要在init时插入到has_many记录中的值 我一直在做的是在用户之后手动创建成员资格记录,但这会给我两个成员资格,一个具有正确的字段值,一个具有初始“nil”值,还有我手动创建的记录。在我的测试中 cl

这真是个新手。我知道我可以在我的模型中使用
保存前
保存后
挂钩来控制创建父记录时写入has\u many记录,但我不知道如何传递希望在该子记录中创建的值

在我的场景中,一个用户
拥有许多学校会员资格。目前,当我创建一个用户时,它会创建一个空白的
成员资格
记录,该记录没有正确的初始值。如何向用户传递需要在init时插入到has_many记录中的值

我一直在做的是在用户之后手动创建成员资格记录,但这会给我两个成员资格,一个具有正确的字段值,一个具有初始“nil”值,还有我手动创建的记录。在我的测试中

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,然后更新成员身份中的学校id,因为a)有太多的
SQL
操作,b)无法获得刚刚为该用户创建的正确记录

因为我的用户通过会员身份与学校建立了关系,所以我希望能够找到一种方法将
学校id
传递给用户,并且
嵌套属性将插入
学校id

我想要的是,在创建用户时填充学校和角色,并让它们创建成员记录。我认为这与挂钩前后的
有关,但我想知道最好的解决方案

提前谢谢

编辑

这是我在测试中使用的代码,使用Factory Girl。也许这是问题的一部分-如果我使用rails控制台,我会得到这个 u=User.create(:firstname=>“Dsd”,:姓氏=>“”,:email=>”aa@sdd.com") u、 确认

我得到一个没有成员资格的用户SQL插入(或者至少日志显示没有成员资格插入)

在我的测试中,使用工厂女孩,我确实获得了会员资格。也许这是工厂女孩,但我看不出我在工厂的什么地方获得会员资格。这是我的用户工厂

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

是的,我猜这是工厂女孩-创建一个拥有学校成员资格的用户可能是答案?

请显示您拥有的实际代码,而不是伪代码。例如:@user=create(user\u type)没有任何意义。请看
当我创建一个用户时,它会创建一个空白的成员记录,其中没有正确的初始值
代码的哪个部分?你没有给我们看。如果你以某种方式创建了一个空成员身份,那么在创建用户的过程中,你可以直接传递到那里
school\u id:school.id,role\u id:role.id
。谢谢大家,非常感谢-我想你可能已经回答了我的问题-上面的新编辑。。。
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