首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为一个方法编写一个工厂,该方法的belongs_to是同一个模型的两个不同实例,并且需要它的id在factory Bot中?

如何为一个方法编写一个工厂,该方法的belongs_to是同一个模型的两个不同实例,并且需要它的id在factory Bot中?
EN

Stack Overflow用户
提问于 2018-08-12 05:34:45
回答 1查看 195关注 0票数 1

我有一个User模型,has_many帐户、每个Account belongs_to一个用户和has_many事务、每个Transactions到两个不同的帐户(sender_accountrecipient_account),添加工厂的原始belongs_to方法(比如account)将不能工作,因为我需要一个sender_accountrecipient_account

如果使用sender_account 1手动设置ID并运行rpsec,则会得到:

代码语言:javascript
复制
ActiveRecord::AssociationTypeMismatch:
       Account(#5570447856500) expected, got 1 which is an instance of Integer(#5570414320800)

即使ID是以Integer形式存储的。

当我的模型belongs_to添加到同一模型的不同实例时,我如何添加关联?我已经定义了我的帐户和用户工厂,它们可以正常工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-12 06:00:38

代码语言:javascript
复制
ActiveRecord::AssociationTypeMismatch:
       Account(#5570447856500) expected, got 1 which is an instance of Integer(#5570414320800)

实际上,此错误表示,该整数是指定的,而不是帐户,因此我们可以将现有帐户ids指定为sender_account_idrecipient_account_id

代码语言:javascript
复制
FactoryBot.define do
  factory :transaction do
    sender_account_id 1
    recipient_account_id 2
  end
end

另一个解决方案是指定创建的关联的工厂:

代码语言:javascript
复制
FactoryBot.define do
  factory :transaction do
    association :sender_account, factory: :account
    association :recipient_account, factory: :account
  end
end

这将使用sender_account工厂为recipient_accountaccount关联创建一个帐户。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51806014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档