我正在尝试创建一个名为global_list的模型。它将采用与用户相关联的列表和与项目相关联的global_id。我需要创建一个用户(在该对象的回调中创建一个列表)和一个项目(其中global_identification被创建为项目创建的回调)。以下解决方案都不能用于尝试创建这些关联对象。他们应该吗?有没有更好的方法来处理这个?我尝试过为prefer_item_list_id创建访问器,但这也没有用。
FactoryGirl.define do
factory :global_list do
before(:create) {
user=FactoryGirl.create(:user)
mi=FactoryGirl.create(:item)
}
list_id user.liked_list_id
global_id mi.global_id
end
end
块会有帮助吗?
FactoryGirl.define do
factory :global_list do
before(:create) {
user=FactoryGirl.create(:user)
mi=FactoryGirl.create(:item)
}
list_id { List.first.id }
global_id { 3 } # 3 will be created at this point { mil.global_id } doesn't work
end
end
我开始认为FactoryGirl无法做到这一点。任何帮助,将不胜感激?
答案 0 :(得分:1)
试试这个。
FactoryGirl.define do
factory :global_list do
before(:create) { |list|
user=FactoryGirl.create(:user)
mi=FactoryGirl.create(:item)
list.list_id = user.liked_list_id
list.global_id = mi.global_id
}
end
end
完全未经测试
答案 1 :(得分:1)
这在FactoryGirl中是完全可能的,并且实际上经常使用。
在下面的工厂中定义关联对象很简单。不需要花哨的“之前”。
FactoryGirl.define do
factory :global_list do
user
mi
foo_attribute
bar_attribute
end
factory :user do
# blah
end
factory :mi do
# blah
end
end
使用上面的代码,FactoryGirl将首先创建所需的关联对象,并使用它们的id自动创建此对象。
答案 2 :(得分:0)
这样做了:
FactoryGirl.define do
factory :global_list do
list_id { FactoryGirl.create(:user).liked_list_id }
global_id { FactoryGirl.create(:item).global_id }
end
end
Ruby在这种情况下的障碍令人困惑。所以我问:what's the practical difference between these two FactoryGirl declarations