3

我有以下型号

class Professional
  include Mongoid::Document
  field :first_name, type: String
  field :last_name, type: String
  field :company_name, type: String
  field :address, type: String


  validates :first_name, length: { minimum: 5, :message => "What" }, format: { with: /\A[a-zA-Z]+\z/, message: "only allows letters" }
end

我想包含一个嵌入式文档,我可以在其中存储多个办公地址。我正在寻找以下数据库结构

{
  "first_name": "Harsha",
  "last_name": "MV",
  "company_name": "Mink7",
  "offices": [
    {
      "name": "Head Office",
      "address": "some address here"
    },
    {
      "name": "Off Site Office",
      "address": "some large address here"
    }
  ]
}
4

1 回答 1

6

您必须定义模型嵌入办公对象,反之亦然,此处解释:http: //mongoid.org/en/mongoid/docs/relations.html。我猜您需要一个 1-N 关系,以便专业人士可以嵌入多个办公室?在这种情况下,这样的事情应该可以工作。

专业模特

class Professional
  include Mongoid::Document
  field :first_name, type: String
  field :last_name, type: String
  field :company_name, type: String
  field :address, type: String


  validates :first_name, length: { minimum: 5, :message => "What" }, format: { with: /\A[a-zA-Z]+\z/, message: "only allows letters" }

  embeds_many :offices, class_name: "Office"
end

办公模式

class Office
  include Mongoid::Document
  field :name, type: String
  field :address, type: String

  embedded_in :professional, :inverse_of => :offices
end

请记住,如果您要为这些对象使用一种形式,则必须执行嵌套形式,例如(或只是谷歌搜索):

<%= form_for @professional, :url => { :action => "create" } do |o| %>
    <%= o.text_field :first_name %>
    <%= o.text_field :last_name %>

    <%= o.fields_for :office do |builder| %>
        <%= builder.text_field :name %>
        <%= builder.text_field :address %>
    <% end %>
<% end %>

请注意,没有任何测试。

于 2014-01-27T09:08:44.333 回答