【问题标题】:Rails 4.2.6 FactoryGirl with polymorphic association具有多态关联的 Rails 4.2.6 FactoryGirl
【发布时间】:2016-04-30 13:06:00
【问题描述】:

我在为与 FactoryGirl 的多态关联设置工厂时遇到问题。我的型号和出厂设置如下所示:

class Address < ActiveRecord::Base
  belongs_to :addressable, polymorphic: true
end

class Customer < ActiveRecord::Base
  has_one :address, as: :addressable
end 

factory :address do
      village Faker::Address.city
      upazilla Faker::Address.street_name
      ward Faker::Address.street_address
      district Faker::Address.state
      association :addressable
end


factory :customer ,class: Customer do 
      recharge_token 10 
      date_of_birth Faker::Date.backward(100)
      manager
      after(:create) do |customer| 
         customer.address = create(:address, addressable: customer)
        #create( :address, addressable: customer)
      end     
end

测试套件因以下错误消息而中断

 vendor/cache/ruby/2.2.0/gems/factory_girl-4.7.0/lib/factory_girl/linter.rb:12:in `lint!': The following factories are invalid: (FactoryGirl::InvalidFactoryError)
 * address - Factory not registered: addressable (ArgumentError)

This 正是我的问题,但不幸的是他的解决方案对我不起作用。谢谢大家的时间!

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 factory-bot rspec-rails


    【解决方案1】:

    明确指定工厂:

    factory :address do
       association :addressable, factory: :customer
    end
    

    或在after create 列表中的另一个模型上创建关联has_one

    factory :customer do 
       after(:create) do |customer| 
         customer.address = create(:address, addressable: customer)
       end
    end
    

    【讨论】:

    • 嘿,您的最佳解决方案太棒了。我可以给这个数组吗?工厂:[:customer, :user, :client]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    • 2013-07-22
    • 1970-01-01
    相关资源
    最近更新 更多