@ kshil правильно, но вы можете немного сжать код и сделать его более модульным.
Создайте вторую :role
фабрику для пользователя с правами администратора.
factory :role do
name 'Normal'
value 'normal'
factory :admin_role do
name 'admin'
value 'admin'
end
end
Кроме того, если название фабрики совпадает с названием ассоциации, вы можете не указывать название фабрики. Фабрика :assignment
становится:
factory :assignment do
user
role
end
Определите фабрику :admin_user
внутри фабрики :user
, и вам не нужно указывать родительскую фабрику. Возможно, вы также добавите две фабрики для определения как обычных, так и администраторских пользователей.
factory :user do
sequence(:username) { |n| "user#{n}" }
email { "#{username}@example.com" }
password 'secret'
password_confirmation 'secret'
factory :normal_user do
after_create {|u| Factory(:assignment, :user => u)}
end
factory :admin_user do
after_create {|u| Factory(:assignment, :role => Factory(:admin_role), :user => u)}
end
end