2010-12-15 14 views
3

J'utilise le http://guides.rubyonrails.org/getting_started.html comme exemple pour m'aider à créer ma propre application. Je crée le blog et les modules de commentaires très bien. Lorsque j'ajoute une méthode aux commentaires ou aux contrôleurs de blog je ne peux pas obtenir une action link_to pour travailler en appelant la nouvelle fonction. Tout indique un problème dans les routes.rb mais j'ai essayé toute la nouvelle syntaxe que j'ai vue et rien ne fonctionne pour moi. Ce que j'essaie de faire est de créer une méthode d'exécution simple dans le contrôleur pour exécuter un script ruby ​​et enregistrer la sortie dans la base de données. Tout fonctionne selon le tutoriel, mais quand j'essaie d'étendre le contrôleur de commentaire avec une fonction personnalisée appelée exécuter, je ne peux pas le faire fonctionner.Rails 3 comment ajouter une méthode personnalisée au contrôleur

comments_controller.rb #Same as destroy 
def execute 
    @post = Post.find(params[:post_id]) 
    @comment = @post.comments.find(params[:id]) 
    @comment.destroy 
    redirect_to post_path(@post) 
end 

_comment.html.erb 
<%= link_to 'Execute Comment', [comment.post, comment], 
    :method => :execute %> 

routes.rb 
resources :posts do 
    resources :comments do 
    get :execute, :on => :member 
    end 
end 

rake routes |grep execute 
execute_post_comment GET /posts/:post_id/comments/:id/execute(.:format) {:action=>"execute", :controller=>"comments"} 

Error when I click Execute comment link: 
No route matches "/posts/3/comments/6" 

Répondre

5

Exécutez rake routes et vérifiez s'il existe des routes pointant vers l'action de votre contrôleur. Sinon, vous devrez en créer un en tant qu '"action membre" ou avec une règle de correspondance.

Si vous voyez la route, vous pouvez la nommer en transmettant un paramètre as => route_name à la règle de routage. Cela permettra à la route_name_path() et route_name_url() aides pour votre link_to

RailsCasts a un bon aperçu rapide des rails 3 syntaxe de routage here

EDIT:

sur la base des exemples de code , essayez ceci:

<%= link_to 'Execute Comment', execute_post_comment_path(comment.post, comment) %> 

Selon les docs here l'option :method ne peut contenir que des verbes valides http (get, p ut, post, supprimer). L'assistant link_to ne peut pas déterminer l'action que vous voulez effectuer avec une action membre personnalisée, vous devez donc utiliser l'itinéraire indiqué ci-dessus.

HTH

+0

Merci, j'ai regardé les rails et j'ai beaucoup appris. J'ai été en mesure d'obtenir une nouvelle fonction pour travailler avec le contrôleur Post, mais je n'ai toujours pas réussi à l'exécuter avec le contrôleur de commentaires. J'ai mis à jour la question pour inclure le code que j'utilise. –

+0

Cela a fonctionné, merci beaucoup! Votre génial. –

+0

Excellent lien aussi! Cela a vraiment aidé tout à l'heure! – earlonrails