4

これは、レールで使用しようとしているアクティブレコードクエリです

q = "Manchester"
b = "John Smith"

Model.find(:all, :conditions => ["city ? AND name like ?", q, b])

しかし、レールコンソールでこのエラーが発生します

ActiveRecord::StatementInvalid: SQLite3::SQLException: near "'Manchester'": 構文エラー: SELECT "model".* FROM "model" WHERE (city 'Manchester' AND name like 'John Smith')

助けてください!

4

3 に答える 3

8

を欠場LIKEしましたcity

Model.where('city LIKE ? AND name LIKE ?', "%#{q}%", "%#{b}%");
于 2012-08-21T04:17:25.227 に答える
5

この構文を使用することもできます。これは、どの変数がどの変数に対応するかを把握しようとするよりもはるかに読みやすい?です。つまり、1つか2つあれば問題ありませんが、それ以上になるとかなり醜くなります。

Model.where("city LIKE :city AND name LIKE :name", { city: "%#{q}%", name: "%#{b}%"  })

プレースホルダーとハッシュ キーは、それらが一致する限り、好きなものにすることができます (たとえば、ハッシュ キーで:cityand thenを使用しないでください)。hamster:

これの良いところは、1 つの変数を複数の検索に使用できることです。

where("user LIKE :term OR email LIKE :term OR friends LIKE :term", { term: "%#{params[:term]}%"})
于 2014-05-13T14:59:01.423 に答える
3

これを試して:

Model.find(:all, :conditions => ["city = ? AND name like ?", q, b])
于 2012-08-21T04:14:20.030 に答える