坚持embeds_one关系mongoid

时间:2013-03-19 17:53:44

标签: ruby-on-rails ruby ruby-on-rails-3 mongoid

class Order
 include Mongoid::Document
 include Mongoid::Timestamps

 #relationships
  embeds_one :user_detail

  #fields
  field :description

  #validations  
  validates :user_detail, presence: true
end

这是嵌入对象的顺序:

class UserDetail
  include Mongoid::Document
  include Mongoid::Timestamps

  #fields
  field :name, :type => String
  field :zip_code, :type => String
  field :email, :type => String

  # Relationships
  embedded_in :order

  #validations
  validates_presence_of :name, :zip_code, :email
end

我希望在order对象user_detail embedded_in对象的mongodb order对象上保存/保留。

我尝试过:

order = Order.new(description: "checking description")
order.user_detail = Order.new(:name => "John", :zip_code => "26545", :email => "john@john.com")
order.save!

但我的验证失败了:

o.save!
Mongoid::Errors::Validations: 
Problem:
  Validation of Order failed.
Summary:
  The following errors were found: User detail is invalid
Resolution:
  Try persisting the document with valid data or remove the validations....

如何解决此问题?我正在使用mongoid 3.x

2 个答案:

答案 0 :(得分:2)

应该是:

order = Order.new(description: "checking description")
order.user_detail = UserDetail.new(:name => "John", :zip_code => "26545", :email => "john@john.com")
order.save!

Order.new

你有OrderDetail.new

答案 1 :(得分:0)

您无需使用

手动创建user_detail

order.user_detail = UserDetail.new... order.save!

如果您添加autobuild属性

,将自动创建嵌入式user_detail

embeds_one :user_detail autobuild: true

如果你想在数据库中持久存在user_detail,也不要忘记添加

validates_presence_of :user_detail

或者你不会在mongo db中看到持久的user_detail。