我想创建一个“帖子”和一个“卡片”,但要创建卡片,必须具有company_id
factory :post do
first_title { Faker::Name.name }
sub_title { Faker::Name.name }
email { Faker::Internet.email }
company_id {}
card { FactoryBot.create(:card, company_id: company_id) }
end
但我得到这个错误:
undefined local variable or method `company_id' for #<FactoryBot::SyntaxRunner:0x00007f629fb1b260
2条答案
按热度按时间vc9ivgsu1#
理想情况下,如果您的测试需要为自己创建一个定义良好的ocntext,而不依赖于工厂行为,那么您应该调用工厂,并将关联对象作为每个工厂调用的参数传递。
但是如果你真的想使用id来实现这个目标,你可以使用transient属性。
使用
card
对象:使用 transient 属性:
更新:我为第一个示例中的工厂添加了代码
x0fgdtte2#
我过去很少使用
FactoryBot
,但是当我查看文档时,我会尝试这样做:或者你可以在你的
Card
模型中添加一个回调函数来自动地将country
设置为相关帖子的国家,如下所示: