Mongoid:如何设置嵌入对象(embeds_one关系)而不持久化

时间:2016-11-25 09:58:31

标签: ruby mongoid

说我有两个型号:

class Person
  include Mongoid::Document
  embeds_one :address
end

class Address
  include Mongoid::Document
  embedded_in :person
end

我正在尝试设置已创建的person的地址,而不会将address保留到数据库中。

person.address = Address.new # Automatically persists address to the database.

我的问题与this one基本相同,但这是一个embeds_one关系,因此build方法不可用。我已经看到了动态创建的build_<embedded_object>方法,但它似乎不接受与build相同的选项,即用于构建嵌入对象的特定类(它是关联类的子类) :

person.posts.build({
  name: "Another post"
}, SpecialPost)
# Works

person.build_address({
  name: "An address"
}, SpecialAddress)
# Does not work

1 个答案:

答案 0 :(得分:1)

默认情况下,当您运行

时,嵌入的地址将不会保留

Person.new(...)

仅当您将autobuild添加为true时才会保留

embeds_one :address, autobuild: true

并设置

validates_presence_of :address

后者将确保它将在数据库中持久存在。

或者您可以将地址分配给person对象而不保存它。