2014-09-05 68 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)