ruby-on-rails - rails 中的模式匹配( "where column LIKE ' %foo%")与 Postgres

标签 ruby-on-rails postgresql activerecord

我有一个包含姓名的 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/

相关文章:

ruby-on-rails - Rails 有类似 Django Rest Framework 的东西吗?

ruby-on-rails - 使用 parallel_tests 测试在运行中被杀死

sql - UPDATE FROM SELECT JOIN 以获得独特的匹配

java - 计算JPA中2个日期之间的天数

postgresql - 无法解决此 SQL 查询

ruby-on-rails - Rails 测试 - 检查用户是否使用 Devise 登录

ruby-on-rails - RoR : Devise and Profiles

ruby-on-rails - 仅当子项具有特定属性时才查询对象

ruby-on-rails - Rails 3 时区混淆

ruby-on-rails - 是否有可能知道使用 ruby​​ on rails 中的观察器到底发生了什么变化?