मैंने अपने ऐप्स में से एक में जो मूल दृष्टिकोण लिया है वह यहां दिया गया है। समस्या के कई उत्तर हैं - समस्या एक दस्तावेज़ है, उत्तर एक एम्बेडेड दस्तावेज़ है। आप एक अन्य उत्तर फ़ील्ड उत्पन्न करने के लिए "उत्तर जोड़ें" लिंक का उपयोग कर सकते हैं, और एक को हटाने के लिए "निकालें" लिंक का उपयोग कर सकते हैं।
_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>
problem_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
मैंने कार्यान्वयन के कुछ छोटे-छोटे टुकड़े काट दिए, लेकिन यह काम करना चाहिए।