Eu tenho uma pergunta em duas partes sobre form_for e recursos aninhados. Digamos que estou escrevendo um mecanismo de blog e quero relacionar um comentário a um artigo. Eu defini um recurso aninhado da seguinte maneira:
map.resources :articles do |articles|
articles.resources :comments
end
O formulário de comentários está na exibição show.html.erb dos artigos, abaixo do próprio artigo, por exemplo:
<%= render :partial => "articles/article" %>
<% form_for([ :article, @comment]) do |f| %>
<%= f.text_area :text %>
<%= submit_tag "Submit" %>
<% end %>
Isso gera um erro, "ID chamado para zero, o que seria errado etc." Eu também tentei
<% form_for @article, @comment do |f| %>
Que processa corretamente, mas relaciona f.text_area ao campo 'text' do artigo, em vez do comentário, e apresenta o html para o atributo article.text nessa área de texto. Então, parece que eu também entendi errado. O que eu quero é um formulário cujo 'submit' chame a ação create no CommentsController, com um article_id nos parâmetros, por exemplo, uma solicitação de postagem para / articles / 1 / comments.
A segunda parte da minha pergunta é: qual é a melhor maneira de criar a instância do comentário? Estou criando um comentário @ na ação show do ArticlesController, para que um objeto de comentário esteja no escopo do auxiliar form_for. Em seguida, na ação create do CommentsController, crio um novo @comment usando os parâmetros fornecidos no form_for.
Obrigado!