0

我在 Rails 4 中有一个问题。

在我的factory.rb我有类似的东西:

factory :user do
   sequence(:name)   { |n| "User #{n}" }
   sequence(:email)  { |n| "user_#{n}@example.org" }
   password 'foobar'
   password_confirmation 'foobar'
end

问题,我不知道在创建用户后添加关系。

当我创建一个用户并且他是主持人时,我为用户分配了这样的角色:

u.add_role_id!(11)

我有不同的关系表,带有user_idrole_id并且在用户模型上我有方法。

def add_role_id!(role)
   role_user_relationship.create!(role_id: Role.find(role).id)
end

我如何在factory.rb上做到这一点?

现在我现在要做的事情:

u = FactoryGirl.create(:moderator)
u.add_role_id!(11)

我想默认分配factory.rb

我是怎么做到的?!

谢谢大家!

马努

解决方案:

我必须添加这些行:

after(:create) do |u|
  u.add_roles_ids!([10,20,30])
end

使用整个代码:

factory :user do
   sequence(:name)   { |n| "User #{n}" }
   sequence(:email)  { |n| "user_#{n}@mudev.org" }
   password 'foobar'
   password_confirmation 'foobar'

   after(:create) do |u|
      u.add_roles_ids!([10,20,30])
   end
end

感谢彼得·阿尔文

4

1 回答 1

1

您可以使用https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md#callbacksafter中描述的 FactoryGirl 的回调机制,通过在您的工厂定义中包含以下内容来获得与您现在正在执行的操作相当的行为:

after(:create) {|u| u.add_role_id!(11)

根据您的验证,您可以选择执行此操作after(:build)before(:create).

于 2013-11-02T15:29:34.150 回答