2016-12-21 10 views
0

where関数で変数を使用するにはどうすればよいですか?どのように変数を `where`節でRailsで使うのですか?

私は2つのフィールドAとB(両方とも整数)とレートモデルを持っており、これは動作します:

Rate.where('A = 1 and B = 2') 

は、どのように私はparamsハッシュに入った変数を渡すのですか?

x = params[:x] 
y = params[:y] 
Rate.where('A = x and B = y') 

これは機能せず、エラーを返します。

あなたが質問が変数の代わりにマークし、 第二と第三引数としてこれらの変数を渡す使用することができます

答えて

3

なぜ単純ではない: Rate.where(a: params[:x], b: params[:y])

正常に動作するはずです。データベース内で以下のようなクエリを実行します。

SELECT rates.* FROM rates WHERE rates.a = 'param_x_value' 
    AND rates.b = 'params_y_value' 

可能な限りRailsの構文を使用し、文字列リテラルは使用しないでください。

+1

これは、そのような簡単な作業のためにSQLスニペットを書くことよりもはるかに好ましい方法です。 – sevenseacat

+0

ありがとうございました。同意し、留意してください。 – Pushkar

4

Rate.where('A = ? and B = ?', x, y) 

あなたが任意の直接SQLクエリに疑問符を使用することができますが、私はstandard AR query syntaxを使用することを好みますハッシュ(@AaditiJainが述べたように):

Rate.where(a: x, b: y) 
+0

があるが、 'WHERE'のみRailsの中に? –

+0

@ sagarpandya82はい、それはアクティブレコード宝石からのものです。 – Ilya

+0

愚かな私。働いた。どうもありがとうございます。 – Pushkar

1

@AaditiJain回答が最も好ましい方法です。

別の代替ではなく、次の好き?のシンボルの使用することができます

Rate.where("A = :x and B = :y", {x: params[:x], y: params[:y]}) 
+2

ハッシュが最後の引数であれば、中括弧を省略することができます。 – Ilya

関連する問題