我有两个具有 1 对 1 相互依赖关系的模型。
用户 (1..1) <-> (1..1) 地址
我是这样设置的:
class User
has_one :address
validates :address, presence: true
# automatic create address object for new Users.
before_validation :create_address, on: :create
def create_address
if !address.present?
build_address
end
end
end
class Address
belongs_to :user
validates :user, presence: true
end
我也有这些工厂(FactoryBot)
factory :user do
end
factory :address do
association :user
end
但这会产生无限的问题。
当我尝试使用
Address
创建 FactoryBot.create(:address)
时,它会为同一用户创建 2 个地址。
我找到的唯一解决方案是要么删除User类中Address的自动创建,要么删除Address工厂中User的自动创建。
无论如何,如果我不特意添加缺少的依赖项,工厂将是不完整的并且会失败。
我也可以删除验证,但这对我来说听起来更丑陋。
我尝试过和
FactoryBot callbacks
一起玩。但是,在没有保存其他实例的情况下,不可能保存任何实例,并且在没有其他实例的情况下,任何一个实例都无法保存:/
您对此有何看法?
我使用这个工厂找到了一个稳定的解决方案:
factory :address do
before(:create) do |address|
if address.user.nil?
create(:user, address: address)
end
end
end
这样我在工厂中创建了用户,但同时将正在创建的地址关联到它