我想做的事情如下:
SELECT * FROM USER WHERE NAME LIKE '%Smith%';
Run Code Online (Sandbox Code Playgroud)
我在Arel的尝试:
# params[:query] = 'Smith'
User.where("name like '%?%'", params[:query]).to_sql
Run Code Online (Sandbox Code Playgroud)
但是,这变为:
SELECT * FROM USER WHERE NAME LIKE '%'Smith'%';
Run Code Online (Sandbox Code Playgroud)
Arel正确地包装查询字符串'Smith',但因为这是一个LIKE语句,所以它不起作用.
如何在Arel中进行LIKE查询?
PS奖金 - 我其实是想扫描桌子上两个字段,这两个名称和说明,看是否有查询的任意匹配.那会怎么样?
我需要一个SQL语句来检查是否满足一个条件:
SELECT * FROM my_table WHERE my_table.x=1 OR my_table.y=1
Run Code Online (Sandbox Code Playgroud)
我想以'Rails 3'的方式做到这一点.我在寻找类似的东西:
Account.where(:id => 1).or.where(:id => 2)
Run Code Online (Sandbox Code Playgroud)
我知道我总是可以回退到sql或条件字符串.但是,根据我的经验,这在组合范围时经常会导致混乱.做这个的最好方式是什么?
另一个相关的问题是,如何描述依赖于OR条件的关系.我找到的唯一方法:
has_many :my_thing, :class_name => "MyTable", :finder_sql => 'SELECT my_tables.* ' + 'FROM my_tables ' +
'WHERE my_tables.payer_id = #{id} OR my_tables.payee_id = #{id}'
Run Code Online (Sandbox Code Playgroud)
然而,当组合使用时,这些再次破裂.有没有更好的方法来指定这个?