我在Rails 4中有一个问题。
在我的 factories.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_id 和 role_id ,在用户模型上我有方法。
def add_role_id!(role)
role_user_relationship.create!(role_id: Role.find(role).id)
end
我如何在 factories.rb 上执行此操作?
现在我要做的事情:
u = FactoryGirl.create(:moderator)
u.add_role_id!(11)
我想在 factories.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
感谢Peter Alfvin
答案 0 :(得分:1)
您可以使用https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md#callbacks中描述的FactoryGirl after
回调机制,通过在工厂定义中包含以下内容来获得与您现在正在执行的操作类似的行为:
after(:create) {|u| u.add_role_id!(11)
根据您的验证,您可以执行此操作after(:build)
或before(:create)
。