2011-06-20 8 views
0

のための建物の条件アレイ私はプリペアドステートメントで使用するための条件の配列を構築しようとしている:Railsの - プリペアドステートメント

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

私は以下のが、ActiveRecordの「のエラーを取得をやってみました:: PreparedStatementInvalid(バインド変数(2 4)」の間違った数:?プリペアドステートメントのための条件を構築する適切な方法は何

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

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

+0

のRailsのバージョンは何がこれですか? –

+0

これはRails 2.3.11です – oprogfrogo

答えて

2

問題は、あなたが釜であるということです間違ったクエリーを実行すると、パラメータをクエスチョンマークに渡すことができます。

あなたの結果のクエリは、このようなものになります。ご希望の配列を達成するために

=> ["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

Mandi、返信いただきありがとうございます。この方法はうまくいくようです。しかし、それは少し混乱しているようです。他に何も動作しない場合は、このメソッドを使用するようにデフォルト設定されています。再度、感謝します。 – 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

関連する問題