Rails 4 MongoID встроенные документы
У меня есть следующая модель
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"
}
]
}
1 ответ
Решение
Вам нужно будет определить, что модель встраивает объект office, и наоборот, объяснение здесь: 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
Помните, что если вы собираетесь использовать одну форму для этих объектов, вам нужно будет сделать вложенную форму, что-то вроде (или просто что-то Google):
<%= form_for @professional, :url => { :action => "create" } do |p| %>
<%= 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 %>
Обратите внимание, что ничего не проверено.