我有一个包含姓名的 Person 模型,我想尽可能简单地搜索这些。
是否有类似 DataMapper 的 People.like(:name => "%#{query}%")
的 rails/ActiveRecord 方法?我在 ActiveRecord 文档中找不到类似的内容,但如果根本不可能,我会感到震惊。
目前我正在做 Person.where "name LIKE '%#{query}%'"
,效果很好,但这是一个明显的 SQL 注入(inject)漏洞。
rails 3.2
最佳答案
使用参数化查询来避免 SQL 注入(inject),如下所示:
Person.where('name LIKE ?', '%' + query + '%')
请注意,百分号必须 是参数的一部分,而不是where
子句,否则Rails 会对其进行转义,从而导致语法错误。 (至少在 postgres 上是这样。)
ActiveRecord::StatementInvalid: PG::SyntaxError: ERROR: syntax error at or near "%"
LINE 1: ...name LIKE %'John...
^
关于ruby-on-rails - rails 中的模式匹配( "where column LIKE ' %foo%")与 Postgres,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17555205/