2010-11-30 32 views
2

J'ai une table dans laquelle j'obtiens toutes les listes de la table grâce à la fonction de recherche de rubis. Mais au moment où j'ajoute "AND name LIKE? Test", je me trompe de nombre de variables de liaison. La fonction Project.in_used_projects renvoie la valeur: projects.status = 2Mauvais nombre de complication de variables de liaison dans Ruby

Je ne peux pas changer les Project.in_used_projects à project.status = 2 parce que la valeur est différente pour chaque projet. L'erreur que je reçois est:

wrong number of bind variables (0 for 1) in: (projects.status = 2) AND name LIKE ? test 

Je sais lier les variables format doit être: (paramètre, paramètre, variable, variable) mais je besoin d'être (Paramters, variable, paramter, variable)

Des idées?

Répondre

2

Il me semble que ont le mauvais nombre de variables de liaison. Vous avez 1 point d'interrogation, mais 0 variables liées. En supposant que vous êtes à la recherche d'un nom avec « test » dans quelque part, vous avez besoin de mettre « test » comme une variable de liaison, ou un code dur, comme ceci (0 variables de liaison, 0 emplacements):

[Project.in_used_projects(:alias => "projects") + " AND name LIKE '%test%'"] 

Ou comme ceci (1 variable de liaison, 1 emplacement):

[Project.in_used_projects(:alias => "projects") + " AND name LIKE ?", '%test%'] 
+0

haha ​​oh my. il semble que vous étiez en effet correct. Je ne peux pas croire que j'ai fait une telle erreur de débutant. Et tout cela pendant que je cherchais d'autres solutions. Soupir. Merci encore. Je suppose que j'ai vraiment besoin de me coucher. – TheRealVayne

+0

Qu'en est-il de la place d'utiliser une chaîne, j'utilise plutôt une variable? donc ce serait "AND name like", "% # {query}%". Tout cela est la vue d'ensemble. est-il possible de passer un param dans une vue? – TheRealVayne

+0

@JayG, Oui, vous pouvez utiliser une variable comme ça. C'est pourquoi vous utiliseriez un "?". Si vous saviez que le mot était "test" à l'avance, vous pouvez le coder en dur comme dans mon premier exemple. Mais si vous ne savez pas, il n'est pas sûr de le coder en dur, donc vous devriez utiliser un param comme dans le second exemple (mais, comme vous le dites, en remplaçant ''% test%'' par '"% # {query }% "'. –