12

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

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

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

导轨 3.2

4

1 回答 1

43

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

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

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

ActiveRecord::StatementInvalid: PG::SyntaxError: ERROR:  syntax error at or near "%"
LINE 1: ...name LIKE %'John...
                     ^
于 2013-07-09T18:11:06.500 回答