Formularz z powiązanymi obiektami

Cześć!
Oto sytuacja:

[code]class Answer < ActiveRecord::Base
belongs_to :question
end

class Question < ActiveRecord::Base
has_many :answers
end[/code]
Oto pytanie: Jak zrobić formularz by za jego pomocą móc stowrzyć/edytować treść pytania i powiązanych z nim odpowiedzi? Chodzi mi by w request mieć coś takiego:

 "question" => { "body" => "To jest treść pytania", "answers" => [ { "body" => "To jest treść pierwszej odpowiedzi" }, { "body" => "To jest treść drugiej odpowiedzi" }] }

W tej chwili próbuję coś w stylu

<% form_for :question do |f| %> <%= f.text_area :body %> <%= f.text_area :answers[][:body] %> <% end %>
Co oczywiście owocuje błędem.
Mam nadzieję, że jasno przedstawiłem swój problem :wink:

Krótko - dla każdej odpowiedzi musisz mieć osobne text_area. Jeśli liczba odpowiedzi jest zmienna, to najlepiej byłoby generować je po stronie użytkownika.
W kontrolerze musisz zaś stworzyć osobno każdą odpowiedź (Answer.new(params[:answers][0], Answer.new(params[:answers][1], etc.) i dodać
je do obiektu Question: question.answers << answer1; question.answers << answer2, etc.
Oczywiście najlepiej zrobić to w pętli :slight_smile:

To akurat to wiem apohllo ;-). Chodzi mi bardziej jak to wpisać w widoku by był odpowiedni formularz.

Seban, polecam zapoznać się z railscast’em opisującym szczegółowo obsługę wielu modeli w jednym formularzu:

Complex Forms: Part I

Na początek część I a później II i III. To wg. mnie najlepsze z wszystkich cast’ów (tzn. to się BARDZO przydaje przy 90% aplikacji, radzę obejrzeć kilka razy i zapamiętać wszystkie kroki).

Kluczem do wszystkiego jest fields_for i faux accessors.

Sorry, najwyraźniej nie zrozumiałem pytania :wink: No i nie spojrzałem na to kto zadaje pytanie :stuck_out_tongue:

Bardzo dobrym rozwiązaniem bedzie użycie fields_for, np.:
<% form_for :question do |f| %>
<%= f.text_area :body %>
<% fields_for :answer do |a| %>
<%= a.text_area :body %>
<% end %>
<% end %>

hosiawak podał bardzo dobre odpowiedź. Nie proste rozwiązanie, które wystarczy przekleić w kod ale coś gdzie wszystko jest ładnie wytłumaczone :slight_smile:

Apohllo: spoko :wink: