2011-06-20 49 views
0

建设条件阵列我试图建立一个条件阵列使用在一份声明是:导轨 - 准备好的语句

Cars.find(:all, :conditions=>["color = ? AND doors = ? AND type = ?", "black", "4", "sedan"]) 

我试着做以下,但得到“的ActiveRecord ::的错误PreparedStatementInvalid(错号码绑定变量(4 2)“:

conditions = [] 
conditions += ["color = ?", "black"] 
conditions += ["doors = ?", "4"] 
conditions += ["type = ?", "sedan"] 

Cars.find(:all, :conditions=>conditions) 

什么是建设一个条件准备语句的正确方法

+0

什么版本的Rails,这是什么? –

+0

这是Rails 2.3.11 – oprogfrogo

回答

2

的问题是,你是BUIL因为你将所有的参数都传递给了问题标记。

你得到的查询看起来是这样的:

=> ["color = ?", "black", "doors = ?", "4", "type = ?", "sedan"] 

为了达到你想要的数组,你会做这样的事情。

conditions = [] 
conditions += ["color = ?", "black"] 
array = ["doors = ?", "4"] 
conditions[0].concat(" AND ") 
conditions[0].concat(array[0]) 
conditions << array[1] 

如果你重复上一步,你应该得到你需要的结果。

+0

曼迪,感谢您的回复。这种方法似乎工作。但它似乎有点混乱。如果没有其他的工作,我可能会默认使用这种方法。再次感谢。 – oprogfrogo

0

您可能会发现这更容易做的一个哈希:

conditions = {} 
conditions[:color] = "black" 
conditions[:doors] = 4 
conditions[:type] = "sedan" 

Cars.find(:all, :conditions=>conditions) 
+0

zetetic,我将如何使用哈希来处理需要使用LIKE或regexp查询的情况? – oprogfrogo

+0

然后你坚持传递一个字符串或数组,如Mandi的答案中所示。 – zetetic