我有当前的建模:
A House belongs_to User
A User has_one House
这意味着House
模型引用了User
。我的工厂用户,看起来像这样:
FactoryGirl.define do
factory :user do
house
end
end
这样做基本上是创建一个引用该用户的用户和房屋。
现在,我在名为column
的{{1}}中引入了User
,我希望能够允许工厂按原样工作,但也填写{{1}与创建的众议院。我这样做的原因是因为我想逐步改变参考方向。
我这样做了:
house_id
但我怀疑可能有更好的方法来做到这一点。有什么想法吗?
答案 0 :(得分:0)
首先,您对has_one
和belongs_to
关系的工作方式有错误的认识。
belongs_to
设置1-1或1对多关系,并将外键列放在此模型表中。如果houses.user_id
引用users.id
:
class User < ActiveRecord::Base
has_one :house
end
class House < ActiveRecord::Base
belongs_to :user
end
其次,规格不应取决于按顺序创建的记录。它会产生脆弱的规格和订购问题。相反,让工厂女孩为你创造物品。
FactoryGirl.define do
factory :user do
house
end
end
FactoryGirl.define do
factory :house do
user
end
end
并且不要假设记录具有给定的ID:
# bad
get :show, id: 1
# good
get :show, id: user.to_param
如果您需要设置一个明确关联的记录,您只需传递用户或住宅选项:
let(:user) { create(:user) }
let(:house) { create(:house, user: user) }
it 'should be associated with the correct user' do
expect(house.user).to eq user
end