导轨中的模式匹配("where column LIKE '%foo%")与Postgres的模式匹配



我有一个包含姓名的人模型,我想尽可能简单地搜索这些名字。

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

目前我让它做Person.where "name LIKE '%#{query}%'",效果很好,但是一个明显的SQL注入漏洞。

导轨 3.2

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

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

请注意,百分号必须是参数的一部分,而不是 where 子句的一部分,否则 Rails 将对其进行转义,并且会出现语法错误。(至少在邮局上。

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

最新更新