MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Ajuda do formulário Rails + MongoMapper + EmbeddedDocument


Aqui está a abordagem básica que tomei em um dos meus aplicativos. O problema tem muitas respostas - o problema é um documento, a resposta é um documento incorporado. Você pode usar o link "adicionar resposta" para gerar outro campo de resposta e o link "remover" para excluir um.

_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>

problemas_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

Eu cortei alguns pedaços menores da implementação, mas isso deve funcionar.