2010-11-30 3 views
2

Ich habe eine Tabelle, in der ich alle Auflistungen der Tabelle durch die Ruby-Suchfunktion erhalten.Falsche Anzahl der Bind-Variablen Komplikation in Ruby

conditions = [Project.in_used_projects(:alias => "projects") + " AND name LIKE ? test"] 
projects = Project.find(:all, :conditions => conditions) 

Aber in dem Moment, ich füge "UND Namen LIKE? Test", bekomme ich falsche Anzahl von Bind-Variablen. Die Funktion Project.in_used_projects den Wert zurückgibt: projects.status = 2

Ich kann nicht nur die Project.in_used_projects ändern = 2 bis project.status, da der Wert für jedes Projekt anders ist. Der Fehler, den ich bekommen ist:

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

Ich weiß, Variablen zu binden, das Format sein muss: (Parameter, Parameter, Variable, Variable), aber ich muss es sein (Paramter, Variable, Paramter, Variable)

Irgendwelche Ideen?

Antwort

2

Es scheint mir, Sie do haben die falsche Anzahl von Bind-Variablen. Sie haben 1 Fragezeichen, aber 0 binden Variablen. Angenommen, Sie suchen nach einem Namen mit „test“ in ihm irgendwo, müssen Sie „test“ als Bindevariable setzen, oder hart Code es, wie diese (0 Bind-Variablen, 0 Slots):

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

Oder so (1 Bindevariable, 1 Schlitz):

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

haha ​​oh mein. es scheint, du warst in der Tat richtig. Ich kann nicht glauben, dass ich so einen Anfängerfehler gemacht habe. Und das alles während ich nach einer anderen Lösung suchte. Seufzer. Danke noch einmal. Ich denke, ich muss wirklich ins Bett gehen. – TheRealVayne

+0

Was ist mit statt einer Zeichenfolge, verwende ich stattdessen eine Variable? also wäre es "UND name LIKE?", "% # {query}%". All das ist die Ansicht übrigens. Ist es möglich, einen Param in eine Ansicht zu überführen? – TheRealVayne

+0

@JayG, Ja, Sie können eine Variable wie diese verwenden. Verwenden Sie deshalb ein "?". Wenn Sie wüssten, dass das Wort vor der Zeit "Test" war, können Sie es sicher einfach hart wie in meinem ersten Beispiel programmieren. Aber wenn Sie nicht wissen, ist es nicht sicher, es hart zu codieren, also sollten Sie einen Parameter wie im zweiten Beispiel verwenden (aber, wie Sie sagen, "% test%" durch "% # {query" ersetzen }% "'. –

Verwandte Themen