rails中的模式匹配("列LIKE'%foo%")与Postgres匹配

Ale*_*eue 10 postgresql activerecord ruby-on-rails

我有一个包含名称的Person模型,我想尽可能简单地搜索它们.

是否有一个rails/ActiveRecord方法People.like(:name => "%#{query}%"),就像DataMapper一样?我在ActiveRecord文档中找不到这样的内容,但如果根本不可能,我会感到震惊.

目前我已经做到了Person.where "name LIKE '%#{query}%'",它运行良好,但是一个明显的SQL注入漏洞.

Rails 3.2

Luí*_*lho 37

使用参数化查询来避免SQL注入,如下所示:

Person.where('name LIKE ?', '%' + query + '%')
Run Code Online (Sandbox Code Playgroud)

请注意,百分号必须是参数的一部分,而不是where子句,否则Rails将对其进行转义,您将收到语法错误.(至少在postgres上.)

ActiveRecord::StatementInvalid: PG::SyntaxError: ERROR:  syntax error at or near "%"
LINE 1: ...name LIKE %'John...
                     ^
Run Code Online (Sandbox Code Playgroud)