我试图与工厂女孩建立一个has_many:has_many关系。
以下是我的模特:
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:user,:admin
但这给了我:
FactoryGirl::AssociationDefinitionError: Self-referencing association 'user' in 'admin'
这是为什么?并且我该如何让这个用户成为管理员?我应该创建一个user_role
工厂并创建它吗?
答案 0 :(得分:10)
您可能不希望同时拥有一个名为:admin
的用户特征和一个名为admin
的工厂用于其他类别。
尝试为:admin_role
重命名角色工厂,看看它是否仍然存在问题
答案 1 :(得分:4)
搜索&#34;自我引用&#34;在FactoryGirl的源文件here中。发生此错误的原因是您正在定义&#34; association_with_same_name&#34;
您需要将特征或工厂重命名为其他名称(例如特征:admin_user)