L'obtention de “mauvais nombre d'arguments” erreur sur la méthode de recherche
Je suis à l'aide de Rails 4.2.3 (et de l'utilisation de MySQL 5.5.37). Je vais avoir de la difficulté à écrire une méthode de recherche pour l'un de mes modèles. J'ai colonnes “utilisateur”, “objet” et “jour”, mais le suivant
def find_by_user_object_and_day
respond_to do |format|
@current_user = User.find(session["user_id"])
format.js {
render :text => Userobject.find_by_user_and_object_and_day(:user => @current_user, :object => params[:object], :day => params[:day])
}
end
end
produit l'erreur
F, [2016-02-05T16:49:42.934112 #12058] FATAL -- :
ArgumentError (wrong number of arguments (given 1, expected 3)):
app/controllers/user_objects_controller.rb:77:in `block (2 levels) in find_by_user_object_and_day'
app/controllers/user_objects_controller.rb:74:in `find_by_user_object_and_day'
Comment spécifier les arguments de la méthode de recherche? Je n'ai pas défini de façon explicite que la méthode de recherche parce que je pensais que le “et” syntaxe de travail.
- pouvez-vous poster le
find_by_user_and_object_and_day
méthode?
Vous devez vous connecter pour publier un commentaire.
Le message d'erreur indique:
Cela signifie que vous êtes censé passer dans les 3 arguments distincts, mais que vous avez passé de 1. On dirait que vous avez passé dans une table de hachage de valeurs au lieu autonome de valeurs.
Remplacer:
Avec ceci:
(wrong number of arguments (given 1, expected 3))
. Il a été soumis aux seuls 1 argument (le hash)find_by_some_column_and_another
(dynamique des trouveurs) ont été dépréciée en faveur defind_by
dans les Rails 4+:L'aide du code ci-dessus, la structure devrait résoudre votre problème (
find_by
prend un hash et nécessite seulement1
argument).Si vous voulez continuer à utiliser votre dynamique de la méthode find, vous devez vous assurer que vous avez les deux
params[:object]
etparams[:day]
valeurs renseignées, ainsi que la suppression de lauser:
/object:
/day:
déclarations (comme mentionné par@miler350
)Secondairement, vous devez également vous assurer que vous effectuez votre travail correctement: