2014-09-05 3 views
4

Я пытаюсь создать has_many: has_many отношения с заводской девушкой.Ошибка ассоциации самореференции FactoryGirl

Вот мои модели:

class User < ActiveRecord::Base 
    has_many :user_roles 
    has_many :roles, through: :user_roles 
end 

class UserRole < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :role 
end 

class Role < ActiveRecord::Base 
    has_many :user_roles 
    has_many :users, through: :user_roles 
end 

Вот фабрика для моего пользователя:

FactoryGirl.define do 
    factory :user do 
     user_name { Faker::Name.user_name } 

     trait :admin do 
      association :user, factory: :admin, strategy: :create 
     end 
    end 
end 

Вот фабрика для роли администратора:

FactoryGirl.define do 
    factory :admin, class: Role do 
     name 'admin' 
    end 
end 

Суть этого вопроса это:

trait :admin do 
    association :user, factory: :admin, strategy: :create 
end 

я вызвать его так:

FactoryGirl.create: пользователь,: админ

Но это дает мне:

FactoryGirl::AssociationDefinitionError: Self-referencing association 'user' in 'admin' 

Почему это? И Как я могу сделать этого пользователя администратором? Должен ли я создать фабрику user_role и создать ее?

ответ

8

Возможно, вам не нравится, что у вас есть как пользовательский признак :admin, так и фабрика под названием admin для другого класса.

Попробуйте переименовании роль завода для :admin_role, чтобы увидеть, если это все-таки проблема

4

Поиск «автореферентных» в исходном файле FactoryGirl в here. Эта ошибка произошла потому, что вы были определения «association_with_same_name»

Вам нужно переименовать черту или фабрику с другим именем (например признака: admin_user)

Смежные вопросы