Ruby on rails 如何为属于同一模型的两个不同实例且需要其id'的方法编写工厂;什么是工厂机器人?
我有一个Ruby on rails 如何为属于同一模型的两个不同实例且需要其id'的方法编写工厂;什么是工厂机器人?,ruby-on-rails,ruby,rspec,tdd,factory-bot,Ruby On Rails,Ruby,Rspec,Tdd,Factory Bot,我有一个用户模型,其中有许多帐户,每个帐户属于一个用户,有许多交易,每个交易属于两个不同的帐户(发送方和接收方),原始的属于添加工厂(如帐户)的方法将不起作用,因为我需要一个发送方帐户和接收方帐户 如果我用sender\u account 1手动设置ID并运行rpsec我会得到: ActiveRecord::AssociationTypeMismatch: Account(#5570447856500) expected, got 1 which is an instance of
用户
模型,其中有许多
帐户,每个帐户
属于一个用户,有许多
交易,每个交易
属于两个不同的帐户(发送方
和接收方
),原始的属于添加工厂(如帐户
)的方法将不起作用,因为我需要一个发送方帐户
和接收方帐户
如果我用sender\u account 1
手动设置ID并运行rpsec
我会得到:
ActiveRecord::AssociationTypeMismatch:
Account(#5570447856500) expected, got 1 which is an instance of Integer(#5570414320800)
即使ID存储为整数
当我的模型属于同一模型的不同实例时,如何添加关联?
我已经定义了我的帐户和用户工厂,它们按预期工作
ActiveRecord::AssociationTypeMismatch:
Account(#5570447856500) expected, got 1 which is an instance of Integer(#5570414320800)
实际上,此错误表示,指定的是整数而不是帐户,因此我们可以将现有帐户id指定为发送方帐户id
和接收方帐户id
:
FactoryBot.define do
factory :transaction do
sender_account_id 1
recipient_account_id 2
end
end
另一种解决方案是指定所创建关联的工厂:
FactoryBot.define do
factory :transaction do
association :sender_account, factory: :account
association :recipient_account, factory: :account
end
end
这将使用account
factory为sender\u account
和recipient\u account
关联创建一个帐户。请显示测试失败的代码以及如何在模型中设置关联。第二个解决方案非常有效,非常感谢@Igor Drozdov!