在Rails 2.x和3.x中使用ActiveRecord进行"喜欢"查询吗?

Dan*_*ark 19 activerecord ruby-on-rails

我在Rails 3.x中做这样的查询

Speaker.where("name like '%yson%'")
Run Code Online (Sandbox Code Playgroud)

但是我想避免使用特定于DB的代码.这样做的正确方法是什么?

如果在Rails 2.x中有一种方法可以做到这一点,那也会有所帮助.

Sim*_*tti 23

在Rails 3或更高版本中

Speaker.where("name LIKE ?", "%yson%")
Run Code Online (Sandbox Code Playgroud)

在Rails 2中

Speaker.all(:conditions => ["name LIKE ?", "%yson%"])
Run Code Online (Sandbox Code Playgroud)

避免直接插入字符串,因为该值不会被转义,并且您容易受到SQL注入攻击.


小智 11

您可以使用.matches.

 > t[:name].matches('%lore').to_sql
 => "\"products\".\"name\" LIKE '%lore'"
Run Code Online (Sandbox Code Playgroud)

查询中的实际用法是:

Speaker.where(Speaker.arel_table[:name].matches('%lore'))
Run Code Online (Sandbox Code Playgroud)