2010-12-15 28 views
0

J'essaye d'envoyer un paramètre de vote: 'up' à mon contrôleur, de sorte qu'il remplisse la fonction de vote de current_user.vote_exclusively_for (@book). J'utilise les pouces vers le haut de gemme. J'essaie de le faire en utilisant link_to, et les paramètres corrects apparaissent dans la sortie de mon serveur, mais cela ne fonctionne pas avec le contrôleur. Je dois faire quelque chose de mal, mais je ne suis pas sûr de quoi. Dois-je faire quelque chose de différent avec les itinéraires, autres que les livres: les ressources?Publication sur le contrôleur via link_to

Cette mon action vote dans books_controller

def vote 
    @book = Book.find(params[:id]) 
    if params[:vote] == 'up' 
     current_user.vote_exclusively_for(@book) 
    end 
     redirect_to @book 
end 

Et voici l'exemple link_to à mon avis:

<%= link_to "Vote Up", :url => { :controller => "books", :action => "vote", :vote => "up"}, :method => :post %> 

Tous les conseils sur où mes tentatives se délitent serait grandement apprécié (note supplémentaire : quand je mets la fonction current_user.vote_exclusively_for (@book) à mon avis ça marche) donc je pense que c'est un problème de view/routes/link_to, pas la fonction elle-même.

+0

Que voulez-vous dire «cela ne fonctionne pas avec le contrôleur»? Le code de votre contrôleur est-il en cours d'exécution? Voyez-vous une erreur quelque part? Quel est le résultat de l'exécution de «rake routes»? – Samo

Répondre

3

Je ne comprends pas votre link_to. Il semble manquer l'ID du livre sur lequel il vote?

Assurez-vous que votre fichier routes.rb ressemble à ceci:

resources :books do 
    post :vote, :on => :member 
end 

changer ensuite votre fonction link_to à ceci:

link_to "Vote Up", vote_book_path(@book, :vote => "up"), :method => :post 
+0

J'ai mis obtenir au lieu de poster dans les ressources, je ne sais pas pourquoi cela a fonctionné ... mais il l'a fait! Merci! – James

0

Je viens d'avoir un problème similaire et a résolu le problème en utilisant ce style syntaxe:

<%= link_to "Vote Up", {:controller => "books", :action => :vote, :vote => "up" }, {:method => :post} %> 

assurez-vous également que votre routes.rb a quelque chose de similaire à

resources books do 
    post :vote 
end