Ruby on rails 工厂女孩(4.2.0)多对多关系

Ruby on rails 工厂女孩(4.2.0)多对多关系,ruby-on-rails,rspec,ruby-on-rails-3.2,tdd,factory-bot,Ruby On Rails,Rspec,Ruby On Rails 3.2,Tdd,Factory Bot,我想使用FactoryGirl 4.2.0正确地建立多对多工厂集。我不断地遇到一些文档/示例,这些文档/示例的语法都是以前FactoryGirl版本中的过时语法,它们混合在一起,对我来说根本不起作用 考虑到以下两个资源及其链接表,如何设置此场景: class User < ActiveRecord::Base has_many :user_registrations has_many :registrations, through: :user_registrations end

我想使用FactoryGirl 4.2.0正确地建立多对多工厂集。我不断地遇到一些文档/示例,这些文档/示例的语法都是以前FactoryGirl版本中的过时语法,它们混合在一起,对我来说根本不起作用

考虑到以下两个资源及其链接表,如何设置此场景:

class User < ActiveRecord::Base
  has_many :user_registrations
  has_many :registrations, through: :user_registrations
end

class UserRegistration < ActiveRecord::Base
  belongs_to :user
  belongs_to :registration
end

class Registration < ActiveRecord::Base
  has_many :user_registrations
  has_many :users, through: :user_registrations
end
它以以下方式失败,我意识到这是因为这种设置是针对一对多关系的

1) User Login Success
     Failure/Error: user = FactoryGirl.create(:user_with_registrations)
     NoMethodError:
       undefined method `user=' for #<Registration:0x007fc48e2ca768>
     # ./spec/factories.rb:18:in `block (4 levels) in <top (required)>'
1)用户登录成功
失败/错误:user=FactoryGirl.create(:用户注册)
命名错误:
未定义的方法“user=”用于#
#./spec/factories.rb:18:in'block(4层)in'
使用最新的FactoryGirl语法为多对多方案定义工厂集的正确方法是什么?(4.2.0)


谢谢

我想我以前已经讨论过这个问题了,问题是(不太明显,你会同意这一点)在工厂定义中使用常量名称

请尝试使用字符串,如下所示:

factory :user, class: 'User' do
  ...

对我来说,似乎你必须通过
用户注册
使
拥有许多
注册
用户的关联。这样看起来

    factory :user_registration do
       association :user
       association :registration
    end

    factory :user do
       ..setup for email and password

       factory :user_with_registrations do

          ignore do
            registrations_count 1
          end

          after(:create) do |user, evaluator|
            FactoryGirl.create_list(:user_registration, evaluator.registrations_count, user: user)
          end
       end
    end

    factory :registration do
       ..setup for registration

       factory :registration_with_user do

          ignore do
            users_count 1
          end

          after(:create) do |registration, evaluator|
            FactoryGirl.create_list(:user_registration, evaluator.users_count, registration: registration)
          end
       end
    end

不。无论哪种方式,它的响应都是一样的。谢谢你的帮助!仅供参考:我已决定与制造商一起进行工厂测试。对我来说似乎更干净,我已经改变了一切。我可能会在未来的应用程序中使用factory_girl来测试差异。
    factory :user_registration do
       association :user
       association :registration
    end

    factory :user do
       ..setup for email and password

       factory :user_with_registrations do

          ignore do
            registrations_count 1
          end

          after(:create) do |user, evaluator|
            FactoryGirl.create_list(:user_registration, evaluator.registrations_count, user: user)
          end
       end
    end

    factory :registration do
       ..setup for registration

       factory :registration_with_user do

          ignore do
            users_count 1
          end

          after(:create) do |registration, evaluator|
            FactoryGirl.create_list(:user_registration, evaluator.users_count, registration: registration)
          end
       end
    end