如何为最小数量的关联记录验证的模型创建FactoryBot工厂?

问题描述 投票:0回答:2

我有一个User模型,只有在至少有一个地址时才有效:

class User
  has_many :addresses
  validates :addresses, length: { miniumum: 1}
end

class Address
  belongs_to :user
end

我尝试像这样定义我的FactoryBot工厂:

FactoryBot.define do
  factory :user do
    association :address
    name 'test'
  end
end

使用create(:user)创建用户时,由于缺少地址而无法保存用户,这是一个错误。似乎只有在创建用户后才会创建关联(这显然会产生验证错误)。建造工厂的正确方法是什么?

谢谢

ruby-on-rails rspec factory-bot
2个回答
0
投票

试试:

FactoryBot.define do
  factory :user do
    name 'test'

    before(:create) do |user|
      user.addresses << build(:address, user: user)
    end
  end
end

请记得为address创建一个工厂。


0
投票

association属性,只应在模型包含外键(您在其上声明belongs_to的模型)时使用。从工厂中删除association :address并在保存用户之前使用before(:create)回调构建地址:

FactoryBot.define do
  factory :user do
    name 'test'
    before(:create) { |object| object.addresses.build() }
  end
end
© www.soinside.com 2019 - 2024. All rights reserved.