2011-08-23 3 views
2

J'ai un système simple dans lequel les photos ont beaucoup de commentaires. Je suis sûr que je ne fais pas bien, mais j'essaie de construire un système de notation simple pour les commentaires. comment.rating commence à 0 et peut monter.Pourquoi mon incrément ne fonctionne-t-il pas correctement?

C'est une partie de mon contrôleur Commentaires

class CommentsController < ApplicationController 

    def increment 
    @comment = Comment.find(params[:id]) 
    @comment.rating += 1 
    redirect_to(@photo) 
    end 

end 

Je pense que la méthode increment est très bien, mais comment j'appelle ce n'est pas:

<%= link_to "+", :controller => 'comments', :method => 'increment' %> 

qui ne fonctionne pas. Je sais que c'est une question un peu fondamentale, mais j'apprécierais tout conseil. Merci.

+0

Merci beaucoup pour les pointeurs tout le monde. Je pensais que j'étais beaucoup plus loin que moi. –

Répondre

1

Je crois que vous n'êtes pas passer un commentaire: id params.

Vous pouvez le faire en définissant un itinéraire comme celui-ci dans votre routes.rb fichier:

match 'increment_rating/:comment_id' => 'Comments#increment', :as => 'increment_rating' 

avec votre action increment commençant maintenant avec

def increment 
    @comment = Comment.find(params[:comment_id]) 
    ... 
end 

puis l'appeler de la vue avec

<%= link_to '+', increment_rating_path(comment.id) %> 

comment.id donne l'ID du commentaire dont vous voulez incrémenter le commentaire

1
<%= link_to "+" , :controller => "comments", :action => "increment", :id => @comment %> 
1
<%= link_to "+" , :controller => "comments", :action => "increment", :id => comment.id %> 

Gardez à l'esprit en général une telle action serait utiliser POST ou PUT, dans ce cas, vous devez spécifier: méthode avec soit: après ou: mettre.

Si vous avez ajouté l'incrément dans les routes, vous pouvez également utiliser:

<%= link_to "+", increment_comment_path(comment.id) %> 
Questions connexes