Tengo una pregunta de dos partes sobre form_for y los recursos anidados. Digamos que estoy escribiendo un motor de blog y quiero relacionar un comentario con un artículo. He definido un recurso anidado de la siguiente manera:form_for con recursos anidados
map.resources :articles do |articles|
articles.resources :comments
end
los comentarios están en la vista show.html.erb para los artículos, por debajo del propio artículo, por ejemplo a esto:
<%= render :partial => "articles/article" %>
<% form_for([ :article, @comment]) do |f| %>
<%= f.text_area :text %>
<%= submit_tag "Submit" %>
<% end %>
Este da un error, "Identificación llamada por nulo, que erróneamente, etc." También he intentado
<% form_for @article, @comment do |f| %>
que hace correctamente, pero se refiere a f.text_area campo 'texto' del artículo en lugar de la observación de, y presenta el html para el atributo article.text en esa área de texto. Así que parezco tener esto mal también. Lo que quiero es un formulario cuyo 'enviar' llamará a create action en CommentsController, con un article_id en los params, por ejemplo, una solicitud posterior a/articles/1/comments.
La segunda parte de mi pregunta es, ¿cuál es la mejor manera de crear la instancia de comentario para empezar? Estoy creando un @comment en la acción de mostrar de ArticlesController, por lo que un objeto de comentario estará en el alcance de form_for helper. Luego, en la acción create del CommentsController, creo un nuevo comentario utilizando los parámetros pasados desde form_for.
Gracias!
Es trabajo pero, tuve que modificar el controlador como dijo jamuraa. –
La manera de atasco funciona, pero puede terminar con rutas adicionales que probablemente desconozca. Es mejor ser explícito. – cdunn2001
Tenía recursos anidados, @result inside @course. Sin embargo, '[@result, @course]' funcionó, pero 'form_for (@result, url: {action:" create "})' también funciona.Esto solo necesita el último nombre de modelo y el nombre del método. – Anwar