如何在Rails中_properly_转义LIKE查询?

时间:2016-01-27 18:18:38

标签: sql ruby-on-rails ruby activerecord

我一直在寻找一种方法正确在Ruby on Rails中转义LIKE查询。但所有答案都建议使用字符串插值:

Post.where("title LIKE ?", "%#{title}%")

即使有Arel人也建议以相同的方式使用字符串插值。

但这有一个警告。如果查询包含%字符,它将影响LIKE表达式,这意味着像20% less这样的查询将导致结果包含哪些标题包含20less之间的任何内容我想要的是。我想要的是获取标题中包含20% less的所有帖子。

我知道sanitize_sql_like模块中有一个名为ActiveRecord::Sanitization的方法,但它是受保护的方法,我不能直接调用它。

我可以转到github上的方法源并复制代码,它实际上是一个非常简单的代码:

pattern = Regexp.union(escape_character, "%", "_")
string.gsub(pattern) { |x| [escape_character, x].join }

但我不知道。如果Rails已经拥有它,为什么要再写一次呢?

有没有办法直接调用该方法?或者在Rails中转义LIKE查询的任何其他方法。

PD:回到过去在CodeIgniter中,我使用了一个名为escape_like_str的方法来做到这一点。我拒绝相信Rails没有。

0 个答案:

没有答案