【发布时间】:2011-07-22 23:51:06
【问题描述】:
我有一个拥有一个用户模型的帐户模型和一个属于帐户模型的用户模型。我认为演示所需的基本代码是:
class Account < ActiveRecord::Base
has_one :user
validates_presence_of :user
accepts_nested_attributes_for :user
end
class User < ActiveRecord::Base
belongs_to :account
# validates_presence_of :account # this is not actually present,
# but is implied by a not null requirement
# in the database, so it only takes effect on
# save or update, instead of on #valid?
end
当我在每个工厂中定义关联时:
Factory.define :user do |f|
f.association :account
end
Factory.define :account do |f|
f.association :user
end
我得到一个堆栈溢出,因为每个人都在递归地创建一个帐户/用户。
我能够解决这个问题的方法是在我的测试中模拟嵌套的实体形式:
before :each do
account_attributes = Factory.attributes_for :account
account_attributes[:user_attributes] = Factory.attributes_for :user
@account = Account.new(account_attributes)
end
但是,我希望将这个逻辑保留在工厂中,因为一旦我开始添加其他模块,它就会失控:
before :each do
account_attributes = Factory.attributes_for :account
account_attributes[:user_attributes] = Factory.attributes_for :user
account_attributes[:user_attributes][:profile_attributes] = Factory.attributes_for :profile
account_attributes[:payment_profile_attributes] = Factory.attributes_for :payment_profile
account_attributes[:subscription_attributes] = Factory.attributes_for :subscription
@account = Account.new(account_attributes)
end
请帮忙!
【问题讨论】:
标签: ruby-on-rails validation factory-bot