2008-10-21 16 views
5

Tengo una pregunta de rails realmente simple aquí, pero parece que no puedo encontrar la respuesta en ningún lado. Supongo que algunos de los problemas provienen de mí siguiendo un tutorial para Rails 1.2 con Rails 2.1. De todos modos ...Rails ignorando render y redirect_to

Estoy escribiendo un sistema de blog y estoy implementando el bit de comentarios. Tengo los comentarios que se muestran bien una vez que los he creado utilizando script/consola, pero obtener el formulario de comentarios en sí mismo trabajando es la parte más difícil.

En posts_controller.rb tengo

def comment 
    Post.find(params[:id]).comments.create(params[:comment]) 
    flash[:notice] = "Added comment" 
    #render :action => show 
    redirect_to :action => show 
    end 

y en show.html.erb (la vista) Tengo

<%= form_tag :action => "comment", :id => @post %> 
    <%= text_area "comment", "body" %><br> 
    <%= submit_tag "Post Comment" %> 

Cuando envíe el formulario que trata de ir a la urb/posts/comment/1 que obviamente es incorrecto, y se queja de que no puede encontrar una plantilla. Obviamente no quiero una plantilla allí porque le dije que redirija a la acción de mostrar porque quiero que vuelva a mostrar la página de la presentación de la publicación, con el nuevo comentario allí.

He intentado tanto la línea comentada (render: acción => mostrar) como la línea redirect_to, y ninguno parece hacer nada en absoluto.

Estoy seguro de que me falta algo simple, pero ¿qué es?

Respuesta

8

¿Tiene redirect_to :action => 'show', :id => params[:id] con las citas de show work?

-1

sí, utiliza el estilo old rails.

Algo nuevo:

form_for :comment, :url => { :post_id => @post } do |f| 
    f.text_area :body 
    submit_tag "Post" 
    end 

puede utilizar los recursos de mensajes y comentarios, de búsqueda de Google para una mejor tutorial o instalar rieles 1.2.6:

gem install -v 1.2.6 rails 
0

Rails 2.1 abraza "recursos REST". show es simplemente el nombre de una de las acciones REST predefinidas que usan todos los controladores de rieles.

Rails hace algo de magia entre bastidores, y: show es equivalente a "mostrar este elemento específico con un ID específico dado". Parece que se está confundiendo con eso. Es probable que la ID esté en default a "1". De ahí la URL generada que se está viendo desde el render llamar

Los Carriles 2,1 manera de hacerlo sería utilizar las siguientes acciones y plantillas:

  • index - muestra la lista completa de los comentarios
  • create - agregar un nuevo comentario
  • show - visualizar solo un comentario específico (no la lista completa). No suena como que esto es lo que quieres, pero la "magia" dentro de los rieles se ajustará a esto por defecto.

También hay acciones para new (mostrar vistas a introducir un nuevo comentario) edit (vista de presentación de hacer una edición de un comentario existente) update (actualización presentación mango) y destroy (duh), pero doesn' Parece que los usarías en este ejemplo.

¿Tiene un enlace al tutorial? No sería demasiado difícil adaptarlo al estilo de Rails 2.1.

+0

El tutorial está en http://www.sapphiresteel.com/How-To-Create-A-Ruby-On-Rails-Blog,168. También he publicado otra pregunta sobre este tipo de problema http://stackoverflow.com/questions/224669/correct-rails-21-way-of-doing-things – robintw

Cuestiones relacionadas