2014-09-05 79 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”

您需要将特征或工厂重命名为不同的名称(例如trait:admin_user)