2013-08-10 3 views
0

У меня есть рельсы структуры пользователя, что это что-то вроде этого:FactoryGirl ассоциация членства и роли

User.create(
    email: '[email protected]', 
    password: 'testtest', 
    password_confirmation: 'testtest' 
).memberships.create(
    role_id: 1 
) 

Где

Role.create(
    name: 'admin' 
) 

Как я могу создать эту ассоциацию в FactoryGirl?

Модели:

User.rb

has_many :memberships 
has_many :roles, through: :memberships 

Membership.rb

belongs_to :user 
belongs_to :role, dependent: :destroy 

Role.rb

has_many :memberships, dependent: :destroy 
has_many :users, through: :memberships 
+0

Можете ли вы разместить свои модели? особенно принадлежность, has_many и т. д. – Flo

+0

Вы предпочитаете не использовать рецепты Devise, Rolify и CanCan? – scaryguy

ответ

0

Это зависит от ассоциаций, которые вы используете. Вот пример для имеет много ассоциации

factory :user do 
    email     "[email protected]" 
    password    "testtest" 
    password_confirmation "testtest" 
    role 
end 

, который создает пользователь и с вызовом «роль» ассоциация будет установлена ​​

factory :role do 
    name "admin" 
end 

относительно вашего комментария, попробуйте это:

factory :user do 
    email     "[email protected]" 
    password    "testtest" 
    password_confirmation "testtest" 
    role 
end 

factory :role do 
    name "admin" 
end 

factory :membership do 
    user 
    role 
end 
+0

Спасибо @Flo, я просто добавил модели. Если у пользователя есть несколько ролей через членство, это будет просто «членство» на фабрике «Пользователь», а затем «роль» на фабрике «Членство»? – bswinnerton

+0

Я отредактировал мой ответ – Flo

0

Так вы можете использовать детские фабрики для моделирования этого процесса при сохранении администраторских и неадминистративных заводов

factory :user do 
    sequence(:email) { |n| "user#{n}@rmail.com" } 
    password "supersecret" 
    password_confirmation { |u| u.password } 
    factory :admin do 
    admin_membership 
    end 
end 
factory :membership do 
    user 
    role 
    factory :admin_membership do 
    admin_role 
    end 
end 
factory :role do 
    name "role" 
    factory :admin_role do 
    name "admin" 
    end 
end