我有两个模型,它们具有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
型
但这会产生无限的问题。
当我尝试使用FactoryBot.create(:address)
创建一个Address
时,它为同一个用户创建了2个线程。
我找到的唯一解决方案是删除User类中Address的自动创建,或者删除Address工厂中User的自动创建。
在任何情况下,工厂都将是不完整的,如果我不添加缺少的依赖项,工厂将失败。
我也可以删除验证,但这听起来更丑陋的我。
我尝试了很多组合。但是不可能保存其中一个示例而另一个示例没有被保存,没有另一个示例它们都不能被保存:/
你对此有什么看法?
2条答案
按热度按时间1bqhqjot1#
您可以使用内联关联定义并使用引用正在创建的模型的
instance
方法:个字符
的字符串
tcomlyy62#
我使用这个工厂找到了一个稳定的解决方案:
字符串
这样,我在工厂中创建了User,但同时将正在创建的Address与之关联