3

Rails の find_by_sql で LIKE 演算子を使用できるように、変数を囲む引用符を削除するにはどうすればよいですか?

@entries1 = Entry.find_by_sql(["SELECT `entries`.name as name FROM `entries` where `entries`.name like '%?%'",@something])

譲ります

SELECT `entries`.name as name FROM `entries` where `entries`.name like '%'hello'%'

いつ@something = 'hello'

4

4 に答える 4

3

パーセント記号を SQL に入れる代わりに、注入する変数に追加します (既に存在するパーセント記号/アンダースコアをエスケープした後!)。

"%#{@something.gsub('%', '\%').gsub('_', '\_')}%"
于 2012-11-26T05:59:24.457 に答える
2

データベース内で使用できconcatます:

Entry.find_by_sql([
  "SELECT ... `entries`.name like concat('%', ?, '%')",
  @something
])

または、Ruby でワイルドカードを追加できます。

Entry.find_by_sql([
  "SELECT ... `entries`.name like ?",
  "%#{@something}"
])

他のデータベースは呼び出しの代わりに'%' || ? || '%'orを見たいことに注意してください。'%' + ? + '%'concat

于 2012-11-26T05:56:21.200 に答える
2

@entries1 = Entry.select('name').where('name like ?',"%#{@something}%"])同じことをするべきです

于 2012-11-27T13:38:38.683 に答える