2009-06-02 9 views
2

J'ai cette ligne dans les routes:problème avec des itinéraires personnalisés dans Rails

map.resources :questions, :new => {:vote_for => :put, :vote_against => :put}, :has_many => :replies, :shallow => true

Et j'utiliser les aides suivantes à mon avis:

 
link_to 'OK', vote_for_question_path(@question), :method => :put 
link_to 'NO', vote_against_question_path(@question), :method => :put 

Mais malheureusement, il y a quelque chose de mal avec mon code, comme le dit Rails:

undefined method `vote_for_question_path' for #

Qu'est-ce qui ne va pas?

Répondre

2

Il semble que la syntaxe de votre itinéraire soit incorrecte.

Si vous souhaitez ajouter de nouvelles routes membres (c.-à-celles qui sont applicables à une seule instance d'une ressource), alors vous devriez faire:

map.resources :questions, 
       :member => { :vote_for => :put, :vote_against => :put }, 
       :has_many => :replies, :shallow => true 

D'autre part, si vous voulez remplacer la norme « nouveau » segment URL, il serait:

map.resources :questions, :path_names => { :new => 'vote_for' }, 
       :has_many => :replies, :shallow => true 

— Notez que l'action du contrôleur correspondant serait encore nommé « nouveau ». Cela permettrait à des URL telles que:

/questions/vote_for

Cependant, en regardant ce que vous semblez essayer de faire vous voudrez peut-être envisager la création d'une nouvelle ressource Vote. Cela serait créé lorsqu'un utilisateur vote pour une question et entrerait dans les conventions de routage RESTful standard de Rails. Voter sur une question pourrait alors avoir une URL quelque chose comme:

/questions/22/votes/nouveau

+0

Merci, ça marche! Je voudrais utiliser les conventions RESTful (comme vous l'avez suggéré), mais je ne sais pas comment spécifier si le vote est +1 ou -1 en utilisant/questions/22/votes/new :( – collimarco

+0

Il est difficile de vous donner des conseils L'idée générale est que votre modèle de Question serait associé au modèle Vote, qui serait probablement associé à un modèle Utilisateur.Lorsque j'ai voté sur une question, cette instance Vote serait ajoutée à la collection. des votes pour cette question Pour un -1, il serait supprimé. –

Questions connexes