2013-11-03 87 views
2

我在FactoryGirl中建立了一个非常简单的关联,但是由于某种原因它没有工作。该应用程序适用于旅游公司,因此每个游览都有一个目的地(我使用的是ActiveRecord,因此Tour型号belongs_to a 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

为什么不'目的地nil',如果你不希望任何分配原来。 – tolgap

+0

我确实要分配目标 - 所有'tours'都需要'destination_id' –

回答

4

attributes_for不会加载关联的对象。它只为您请求的对象生成属性。

要使其加载关联的destination,请改为使用buildcreate

1

这些attributes_for不创建关联属性(我相信设计)。这应该工作:

FactoryGirl.attributes_for(:tour, :destination_attributes => FactoryGirl.attributes_for(:destination)) 

但是,这可能是一个滑头的解决方案:

https://stackoverflow.com/a/10294322/632735

:)

+0

我的'tour'模型需要接受'destination'的嵌套属性吗?因为它不适合我(“unknown attribute:destination_attributes”)。尽管感谢您的链接!很有帮助。如果你编辑答案,我会给你一个upvote –

+0

你有Tourtr模型中的attr_accessible:destination_attributes吗?这应该排序:) –

+0

这个问题是'attributes_for'不会持续记录,因此'destination_id'永远不会生成。 –