2011-06-20 88 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