我在FactoryGirl中设置了一个非常简单的关联,但由于某些原因它无法正常工作。该应用程序适用于旅游公司,因此每个旅游都有一个目的地(我正在使用ActiveRecord,因此Tour
模型belongs_to
和Destination
- 所有旅游都需要此关联) 。所以我建立了这样的工厂:
# spec/factories.rb
FactoryGirl.define do
factory :destination do
name "Example Destination"
city "Example City"
state "CA"
end
factory :tour do
departure_date { 1.day.from_now }
return_date { 1.day.from_now }
destination
end
end
然而,当我致电FactoryGirl.attributes_for(:tour)
时,它会返回:
{:departure_date => Mon, 04 Nov 2013 17:51:26 UTC +00:00,
:return_date => Mon, 04 Nov 2013 17:51:26 UTC +00:00}
否destination_id
!为什么呢?
destination
工厂工作正常。
我尝试用旧方式association :destination, factory: :destination
定义关联,但这没有帮助。如果我手动将destination_id
定义为destination_id FactoryGirl.create(:destination).id
,我可以让它工作,但我不应该这样做。知道为什么它不起作用吗?
答案 0 :(得分:4)
attributes_for
不会加载关联的对象。它只为您请求的对象生成属性。
要让其加载关联的destination
,请改为使用build
或create
。
答案 1 :(得分:1)
attributes_for不会创建关联属性(我相信设计)。这应该有效:
FactoryGirl.attributes_for(:tour, :destination_attributes => FactoryGirl.attributes_for(:destination))
但是,这可能是一个更光滑的解决方案:
https://stackoverflow.com/a/10294322/632735
:)