是否可以使用关联作为特征中另一个关联的值?
让我描述一个(简化的)例子。我有3个型号
User
Forum
(belongs_to :forum
)Thread
(belongs_to :forum
,belongs_to :user
)请注意,Thread
包含user_id
,它不属于User
到Forum
(目前,我无法更改此约束)。
我想知道的是,是否有办法定义像
这样的特征FactoryGirl.define do
factory :thread do
trait :with_forum do
association :user
# Lazy-evaluate the value of user to the previously created factory
# THIS IS THE KEY POINT: I want 'user' to be the factory created at the previous line
association :forum, user: user
end
end
end
该特征应该做的是创建一个用户并将其与该线程相关联。 然后它应该创建一个论坛,但用户应该是先前创建的同一个实例。
主要有两个原因:
有什么想法吗?我尝试使用延迟评估,但无法将其与关联一起使用。
答案 0 :(得分:2)
执行相反操作并将线程的用户设置为与论坛相同是否有意义?论坛工厂是否创建了用户?
FactoryGirl.define do
factory :thread do
trait :with_forum do
forum
user { forum.user }
end
end
end
如果你真的想以另一种方式去做,你绝对可以使用懒惰属性:
FactoryGirl.define do
factory :thread do
trait :with_forum do
user
forum { create(:forum, user: user) }
end
end
end
不利于用于构建线程的策略,它将始终创建一个论坛。
答案 1 :(得分:1)
你必须懒惰地评估association
电话:
FactoryGirl.define do
factory :thread do
trait :with_forum do
user
forum { association(:forum, user: user) }
end
end
end