我一直在寻找一种方法正确在Ruby on Rails中转义LIKE查询。但所有答案都建议使用字符串插值:
Post.where("title LIKE ?", "%#{title}%")
即使有Arel人也建议以相同的方式使用字符串插值。
但这有一个警告。如果查询包含%字符,它将影响LIKE表达式,这意味着像20% less
这样的查询将导致结果包含哪些标题包含20
和less
之间的任何内容我想要的是。我想要的是获取标题中包含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没有。