0

編集

動作する構文は次のとおりです...

Model.where('name like ?', "%#{q}%").where('value > ?', c)

また

Model.where("name like (?)","%#{q}%").where("value > ?",c)

これを手伝ってくれたポスターに感謝します。


元の質問

アクティブレコードの構文を理解するのに問題があります。

これが私がやろうとしていることです

q = "John"
c = 50

Model.where('name like ? AND value > ?', "%#{q}%", "%#{c}%")

これは間違った構文です。

私が達成しようとしているのは

name like John AND value greater than 50

ActiveRecordでさまざまな種類のクエリをチェーンするにはどうすればよいですか?

ありがとう。

4

3 に答える 3

4

q と c を引用しないでください:

Model.where('name like ? AND value > ?', q, c)

Rails は、変数を適切な文字列に自動的に変換します。

連鎖とは、where()、select()、order() 関数の連鎖を指します。たとえば、これは上記と同等です。

Model.where('name like ?', q).where('value > ?', c)

like ビットのみに % ワイルドカードを含めたい場合は、次のようにします。

Model.where('name like ?', "%#{q}%").where('value > ?', c)
于 2012-08-21T07:30:20.797 に答える
1

あなたは試すことができModel.where("name like (?)","%#{q}%").where("value > ?",c)ます。または、 スコープを使用して、チェーンをさらに簡単にします

于 2012-08-21T07:33:52.357 に答える
1

AREL を使用する Rails 3 の場合、

ut = User.arel_table
users = User.where(ut[:name].matches("%#{q}%").and(ut[:value].gt(c)))
# SELECT "users".* FROM "users" WHERE ("users"."name" LIKE '%John%' AND "users"."value" > 50)
于 2012-08-21T07:50:10.020 に答える