FactoryGirl自引用关联错误

时间:2014-09-05 11:24:43

标签: ruby-on-rails factory-bot

我试图与工厂女孩建立一个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工厂并创建它吗?

2 个答案:

答案 0 :(得分:10)

您可能不希望同时拥有一个名为:admin的用户特征和一个名为admin的工厂用于其他类别。

尝试为:admin_role重命名角色工厂,看看它是否仍然存在问题

答案 1 :(得分:4)

搜索&#34;自我引用&#34;在FactoryGirl的源文件here中。发生此错误的原因是您正在定义&#34; association_with_same_name&#34;

您需要将特征或工厂重命名为其他名称(例如特征:admin_user)