+ + Carriles MongoMapper EmbeddedDocument formulario de ayuda
-
22-09-2019 - |
Pregunta
Estoy trabajando en una aplicación web bastante simple (famosas últimas palabras) y estoy trabajando con rieles 2.3.5 + 0.7.2 MongoMapper y el uso de documentos incrustados. Tengo dos preguntas para hacer:
En primer lugar, ¿hay ejemplos de aplicaciones por ahí utilizando rieles + + MongoMapper EmbeddedDocument? Preferentemente en GitHub o algún otro sitio similar para que pueda echar un vistazo a la fuente y ver donde se supone que la cabeza? Si no ...
... ¿cuál es la mejor manera de abordar esta tarea? ¿Cómo hago para crear una forma de manejar un documento incrustado.
Lo que estoy tratando de hacer es añadir direcciones a los usuarios. Puedo tirar los dos modelos en cuestión si le gustaría.
Gracias por la ayuda!
Solución
Este es el enfoque básico que tomé en una de mis aplicaciones. Problema tiene muchas respuestas - problema es un documento, la respuesta es un documento incrustado. Puede utilizar el enlace "Añadir respuesta" a generar otro campo de respuesta y el enlace "Eliminar" para borrar uno.
_form.html.erb:
<% form_for @problem do |f| %>
<%= f.error_messages %>
<p>
<%= f.label :content %><br />
<%= f.text_area :content, :size => '50x7' %>
</p>
...etc...
<%= add_answer_link "(add answer)" %>
<div id="answers">
<%= render :partial => 'answer', :collection => @problem.answers %>
</div>
<p><%= f.submit "Submit" %></p>
<% end %>
_answer.html.erb:
<div class="answer">
<% fields_for 'problem[answers]', answer, :index => nil do |f| -%>
<%= f.label :content, "Answer #{answer.id}:" %>
<%= f.text_field :content, :size => 50 %>
<%= link_to_function "(remove)", "$(this).up('.answer').remove()" %>
<% end -%>
</div>
problems_helper.rb
module ProblemsHelper
def add_answer_link(name)
link_to_function name do |page|
page.insert_html :bottom, "answers", :partial => 'answer', :object => Answer.new
end
end
end
Me cortó un par de pequeños trozos de la implementación, pero que debería funcionar.
Otros consejos
Incluso más fácil ahora - actualización para Rails 4.1.1, rubí 2.1.1p76:
Modelos:
class Location
include MongoMapper::EmbeddedDocument
key :state, String, :default => "CA"
key :zip, String
timestamps!
end
class House
include MongoMapper::Document
timestamps!
one :location
end
controlador:
def new
@house = House.new
end
new.html.erb:
<%= form_for @house, url: houses_path do |house_form| %>
<p>
<%= house_form.label :name %><br>
<%= house_form.text_field :name %>
</p>
<%= house_form.fields_for :location do |address_fields| %>
Street : <%= address_fields.text_field :street %>
Zip code: <%= address_fields.text_field :zip %>
<% end %>
<p>
<%= house_form.submit %>
</p>