考虑到以下情况
class User < ActiveRecord::Base
has_and_belongs_to_many :companies
end
class Company < ActiveRecord::Base
has_and_belongs_to_many :users
end
您如何为公司和用户定义工厂,包括双向关联?这是我的尝试
Factory.define :company do |f|
f.users{ |users| [users.association :company]}
end
Factory.define :user do |f|
f.companies{ |companies| [companies.association :user]}
end
现在我试着
Factory :user
也许并不令人意外的是,这会导致无限循环,因为工厂会递归地使用彼此来定义自己。
更令人惊讶的是,我没有发现任何地方提到如何做到这一点,有没有一个模式来定义必要的工厂,或者我做了一些根本错误的事情?
发布于 2010-01-16 11:19:32
Factorygirl已经更新了,现在包括了解决这个问题的回调。有关更多信息,请查看http://robots.thoughtbot.com/post/254496652/aint-no-calla-back-girl。
发布于 2012-04-18 23:07:25
以下是对我有效的解决方案。
FactoryGirl.define do
factory :company do
#company attributes
end
factory :user do
companies {[FactoryGirl.create(:company)]}
#user attributes
end
end
如果你需要特定的公司,你可以这样使用工厂
company = FactoryGirl.create(:company, #{company attributes})
user = FactoryGirl.create(:user, :companies => [company])
希望这能对某些人有所帮助。
发布于 2011-03-03 19:30:04
我在提供的网站上找不到上述情况的示例。(只有1:N和多态关联,但没有habtm)。我有一个类似的例子,我的代码看起来像这样:
Factory.define :user do |user|
user.name "Foo Bar"
user.after_create { |u| Factory(:company, :users => [u]) }
end
Factory.define :company do |c|
c.name "Acme"
end
https://stackoverflow.com/questions/1484374
复制相似问题