ArgumentError: mauvais nombre d'arguments (1 de 2)
Je suis très nouveau pour les Rails, MVC, et CRUD, et je suis en train d'utiliser la méthode de mise à jour pour modifier la quantité de votes sur un post. J'ai le code suivant dans mon Controller Posts méthode de mise à jour:
def update
@post = Post.find(params[:id])
if params[:vote] == 'up'
@post.update_column(:ups => @post[:ups] + 1)
elsif params[:vote] == 'down'
@post.update_column(:downs => @post[:downs] + 1)
end
flash[:notice] = "Thanks for voting! This helps us determine important issues in our schools."
redirect_to 'Posts#index'
end
et j'ai le code suivant dans mon parcours.rb:
OpenMCJC::Application.routes.draw do
root :to => 'posts#index'
resources :posts
match '/posts/:id/:vote', :to => 'posts#update'
end
Après accédant à "/posts/3/up", il met l'erreur suivante:
ArgumentError in PostsController#update
wrong number of arguments (1 for 2)
Les paramètres de la requête en fonction de la page en tant que telles:
{"id"=>"3",
"vote"=>"up"}
Pouvez-vous m'aider à comprendre ce qui s'est passé?
OriginalL'auteur airplaneman19 | 2012-01-11
Vous devez vous connecter pour publier un commentaire.
update_column
prend deux arguments. Vous êtes seulement de passage.Au lieu de:
Essayer:
Cela peut sembler deux arguments:
mais c'est en fait un de hachage.
Avec le plus couramment utilisé
update_attributes
, vous pouvez passer d'un hachage:OriginalL'auteur Mischa
Que Mischa souligné,
update_column
prend deux arguments. Cependant, je tiens à vous déconseillons d'utiliser cette méthode. Tout d'abord, il saute validations qui peut ne pas être ce que vous voulez. Deuxièmement, les Rails a des méthodes intégrées pour l'incrémentation ou la décrémentation des valeurs. Dans votre cas, vous pouvez changer votre méthode de contrôleur à quelque chose comme ceci:OriginalL'auteur Peter Brown