Mam dwuczęściowe pytanie dotyczące form_for i zagnieżdżonych zasobów. Powiedzmy, że piszę silnik bloga i chcę powiązać komentarz z artykułem. Zdefiniowałem zagnieżdżony zasób w następujący sposób:
map.resources :articles do |articles|
articles.resources :comments
end
Formularz komentarza znajduje się w widoku show.html.erb dla artykułów, pod samym artykułem, na przykład w ten sposób:
<%= render :partial => "articles/article" %>
<% form_for([ :article, @comment]) do |f| %>
<%= f.text_area :text %>
<%= submit_tag "Submit" %>
<% end %>
Daje to błąd „Called id for nil, co mogłoby być błędne itd.” Ja też próbowałem
<% form_for @article, @comment do |f| %>
Który renderuje się poprawnie, ale łączy f.text_area z polem „text” artykułu zamiast komentarza i przedstawia kod HTML atrybutu article.text w tym obszarze tekstowym. Więc wydaje mi się, że to też się mylę. To, czego chcę, to formularz, którego 'wyślij' wywoła akcję tworzenia w CommentsController, z parametrem article_id, na przykład żądanie wpisu do / article / 1 / comments.
Druga część mojego pytania brzmi: jaki jest najlepszy sposób na utworzenie wystąpienia komentarza na początek? Tworzę @comment w akcji show elementu ArticlesController, więc obiekt komentarza będzie w zakresie pomocnika form_for. Następnie w akcji tworzenia w CommentsController tworzę nowy @comment, używając parametrów przekazanych z form_for.
Dzięki!