2008-10-21 4 views
5

J'ai une question très simple sur les rails ici, mais je n'arrive pas à trouver la réponse nulle part. Je suppose que certains des problèmes proviennent de moi après un tutoriel pour Rails 1.2 avec Rails 2.1. De toute façon ..Rails ignorant render et redirect_to

J'écris un système de blog et j'implémente le bit de commentaires. J'ai des commentaires affichant bien une fois que je les ai créés en utilisant script/console, mais obtenir le formulaire de commentaires lui-même fonctionne est le bit dur.

En posts_controller.rb je

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

et show.html.erb (la vue) Je

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

Quand je soumets la forme elle essaie d'aller au urb/posts/comment/1 qui est évidemment incorrect, et il se plaint qu'il ne peut pas trouver un modèle. Évidemment, je ne veux pas de modèle là-bas parce que je l'ai dit de rediriger vers l'action de montrer parce que je veux juste ré-afficher la page d'affichage de la publication, avec le nouveau commentaire là.

J'ai essayé à la fois la ligne commentée (render: action => show) et la ligne redirect_to, et aucune des deux ne semble faire quoi que ce soit.

Je suis sûr qu'il me manque quelque chose de simple, mais qu'est-ce que c'est?

Répondre

8

Est-ce que redirect_to :action => 'show', :id => params[:id] avec des citations autour fonctionnent?

-1

oui, vous utilisez le style de vieux rails.

Quelque chose de nouveau:

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

vous pouvez utiliser des ressources pour les messages et les commentaires, la recherche google pour mieux tutoriel ou installer des rails 1.2.6:

gem install -v 1.2.6 rails 
0

Rails 2.1 "englobe RESTful". show est justement le nom de l'une des actions REST prédéfinies que tous les contrôleurs de rails utilisent. Rails fait de la magie dans les coulisses, et: show équivaut à "afficher cet élément spécifique avec un ID spécifique donné". On dirait que ça se mélange avec ça. L'identifiant est probablement "1" par défaut. Par conséquent l'URL générée vous voyez de la rendre appel

Rails 2.1 Le moyen de le faire utiliserait les actions et les modèles suivants:

  • index - affiche la liste complète des commentaires
  • create - ajouter un nouveau commentaire
  • show - afficher un commentaire spécifique seulement (pas la liste complète). Cela ne sonne pas comme c'est ce que vous voulez, mais les rails "magiques" à l'intérieur seront par défaut.

Il y a aussi des actions pour new (vue du spectacle pour entrer un nouveau commentaire) edit (vue spectacle pour faire une édition d'un commentaire existant) update (poignée de soumission de mise à jour) et destroy (duh), mais il n » On dirait que vous les utiliseriez dans cet exemple.

Avez-vous un lien vers le tutoriel? Ce ne serait pas trop difficile de le porter au style Rails 2.1.

+0

Le tutoriel est à http://www.sapphiresteel.com/How-To-Create-A-Ruby-On-Rails-Blog,168. J'ai aussi posté une autre question sur ce genre de problème http://stackoverflow.com/questions/224669/correct-rails-21-way-of-doing-things – robintw