Ruby FactoryGirl.create不';我们不能拯救Mongoid关系
我有两门课:Ruby FactoryGirl.create不';我们不能拯救Mongoid关系,ruby,ruby-on-rails-3,mongoid,factory-bot,Ruby,Ruby On Rails 3,Mongoid,Factory Bot,我有两门课: class User include Mongoid::Document has_one :preference attr_accessible :name field :name, type: String end class Preference include Mongoid::Document belongs_to :user attr_accessible :somepref field :somepref, type: Boolea
class User
include Mongoid::Document
has_one :preference
attr_accessible :name
field :name, type: String
end
class Preference
include Mongoid::Document
belongs_to :user
attr_accessible :somepref
field :somepref, type: Boolean
end
我有两个工厂:
FactoryGirl.define do
factory :user do
preference
name 'John'
end
end
FactoryGirl.define do
factory :preference do
somepref true
end
end
创建User
后,两个文档都保存在数据库中,但是Preference
文档缺少User\u id
字段,因此当我从数据库中读取User
时,一个关系不起作用
我目前已通过在User
factory中添加这段代码修复了它:
after(:create) do |user|
#user.preference.save! #without this user_id field doesn't get saved
end
有谁能解释一下为什么会发生这种情况,有没有更好的解决办法?Mongoid似乎在这里缺乏支持 FactoryGirl创建用户时,首先必须为该新用户创建首选项。由于新用户还没有id,首选项也无法存储它 通常,当您尝试在一个操作中创建父模型和子模型时,需要两个步骤:
FactoryGirl.define do
factory :user do
name 'John'
after(:create) do |user|
preference { create(:preference, user: user) }
end
end
end
如本文所述:
为了确保您始终可以立即读回您刚刚创建的数据
使用Mongoid
编写,您需要设置数据库会话选项
consistency: :strong, safe: true
两者都不是默认值
可能重复的谢谢!你的代码一开始不起作用,但我在块内重写了这样一行:user.preference=create(:preference,user:user),它可以工作。如果我在user类中验证了:preference的存在,你知道该怎么办吗?在执行(:create)回调之前和之后验证失败。哎呀,是的,我忘记了用户。至于验证:您可能需要使用build而不是create。