【发布时间】:2010-09-06 02:26:49
【问题描述】:
我有 2 个模型:
# user.rb
class User < ActiveRecord::Base
has_one :profile, :dependent => :destroy
end
# profile.rb
class Profile < ActiveRecord::Base
belongs_to :user
validates_presence_of :user
end
# user_factory.rb
Factory.define :user do |u|
u.login "test"
u.association :profile
end
我想这样做:
@user = Factory(:user)
=> #<User id: 88,....>
@user.profile
=> #<Profile id:123, user_id:88, ......>
@user = Factory.build(:user)
=> #<User id: nil,....>
@user.profile
=> #<Profile id:nil, user_id:nil, ......>
但这不起作用! 它告诉我我的个人资料模型不正确,因为没有用户! (它将配置文件保存在用户之前,因此没有user_id...)
我该如何解决这个问题?尝试了一切.. :( 我需要调用 Factory.create(:user)...
更新
修复了这个问题 - 现在正在使用:
# user_factory.rb
Factory.define :user do |u|
u.profile { Factory.build(:profile)}
end
# user.rb
class User < ActiveRecord::Base
has_one :profile, :dependent => :destroy, :inverse_of => :user
end
# profile.rb
class Profile < ActiveRecord::Base
belongs_to :user
validates_presence_of :user
end
【问题讨论】:
-
我猜当您“创建”配置文件时,它正在保存它,因此用户也是如此。您是否尝试在工厂中使用 Factory.build(:profile, :user =>a) 来“构建”配置文件?
-
是的,试过了,但没用...我上面的“丑陋”解决方案现在可以用了...感谢您的帮助!
标签: ruby-on-rails testing ruby-on-rails-3 ruby-on-rails-plugins factory-bot