ops*_*psb 119 ruby-on-rails associations has-and-belongs-to-many factory-bot
鉴于以下内容
class User < ActiveRecord::Base
has_and_belongs_to_many :companies
end
class Company < ActiveRecord::Base
has_and_belongs_to_many :users
end
Run Code Online (Sandbox Code Playgroud)
您如何为公司和用户定义工厂,包括双向关联?这是我的尝试
Factory.define :company do |f|
f.users{ |users| [users.association :company]}
end
Factory.define :user do |f|
f.companies{ |companies| [companies.association :user]}
end
Run Code Online (Sandbox Code Playgroud)
现在我试试
Factory :user
Run Code Online (Sandbox Code Playgroud)
也许不出所料,这会导致无限循环,因为工厂递归地使用彼此来定义自己.
更令人惊讶的是,我没有提到如何在任何地方做到这一点,是否有一种模式来定义必要的工厂或我做了一些从根本上错误的事情?
Sub*_*orx 130
这是适合我的解决方案.
FactoryGirl.define do
factory :company do
#company attributes
end
factory :user do
companies {[FactoryGirl.create(:company)]}
#user attributes
end
end
Run Code Online (Sandbox Code Playgroud)
如果您需要特定的公司,您可以通过这种方式使用工厂
company = FactoryGirl.create(:company, #{company attributes})
user = FactoryGirl.create(:user, :companies => [company])
Run Code Online (Sandbox Code Playgroud)
希望这对某人有所帮助.
ops*_*psb 40
Factorygirl已经更新,现在包括回调来解决这个问题.有关详细信息,请查看http://robots.thoughtbot.com/post/254496652/aint-no-calla-back-girl.
Ash*_*ish 22
在我看来,只需创建两个不同的工厂,如:
Factory.define :user, :class => User do |u| # Just normal attributes initialization end Factory.define :company, :class => Company do |u| # Just normal attributes initialization end
当您为用户编写测试用例时,就这样写
Factory(:user, :companies => [Factory(:company)])
希望它会奏效.
我在提供的网站上找不到上述案例的例子.(只有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
Run Code Online (Sandbox Code Playgroud)
小智 5
对我来说有用的是在使用工厂时设置关联.使用你的例子:
user = Factory(:user)
company = Factory(:company)
company.users << user
company.save!
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
45066 次 |
最近记录: |