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

时间:2013-07-09 18:07:42

标签: ruby-on-rails postgresql activerecord

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

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

目前我正在使用Person.where "name LIKE '%#{query}%'",它运行良好但是一个明显的SQL注入漏洞。

Rails 3.2

1 个答案:

答案 0 :(得分:35)

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

Person.where('name LIKE ?', '%' + query + '%')

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

ActiveRecord::StatementInvalid: PG::SyntaxError: ERROR:  syntax error at or near "%"
LINE 1: ...name LIKE %'John...
                     ^