我有一个包含名称的Person模型,我想尽可能简单地搜索它们。
是否有People.like(:name => "%#{query}%")
行的rails / ActiveRecord方法,就像DataMapper一样?我在ActiveRecord文档中找不到这样的内容,但如果根本不可能,我会感到震惊。
目前我正在使用Person.where "name LIKE '%#{query}%'"
,它运行良好但是一个明显的SQL注入漏洞。
Rails 3.2
答案 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...
^