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!

¿Fue útil?

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>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top