ruby-on-rails forms mongodb mongomapper

ruby on rails - Ayuda de formulario Rails+MongoMapper+EmbeddedDocument



ruby-on-rails forms (2)

Estoy trabajando en una aplicación web bastante simple (últimas palabras famosas) y estoy trabajando con Rails 2.3.5 + MongoMapper 0.7.2 y el uso de documentos incrustados. Tengo dos preguntas para hacer:

Primero, ¿hay alguna aplicación de ejemplo usando Rails + MongoMapper + EmbeddedDocument? ¿Preferiblemente en GitHub o en algún otro sitio similar para que pueda echar un vistazo a la fuente y ver dónde debo dirigirme? Si no ...

... ¿cuál es la mejor manera de abordar esta tarea? ¿Cómo podría crear un formulario para manejar un documento incrustado?

Lo que intento hacer es agregar direcciones a los usuarios. Puedo arrojar los dos modelos en cuestión si lo desea.

¡Gracias por la ayuda!


Aún más fácil ahora: actualización para Rails 4.1.1, ruby ​​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>


Este es el enfoque básico que tomé en una de mis aplicaciones. El problema tiene muchas respuestas: el problema es un documento; la respuesta es un documento incrustado. Puede usar el enlace "agregar respuesta" para generar otro campo de respuesta y el enlace "eliminar" para eliminar 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

Corté un par de partes menores de la implementación, pero eso debería funcionar.