具有关联的活动记录查询中的LIKE运算符

时间:2013-11-05 05:32:53

标签: ruby-on-rails activerecord ruby-on-rails-4

我有Product模型和Order模型。假设订单只有一个产品。

我想搜索产品名称中包含“fruity”

的所有订单

以下查询允许我检索关联产品名称等于“fruity”

的所有订单
Order.joins(:product).where(:products => {:name => "fruity"})

但我想要做的是使用LIKE运算符。如何使用查询界面执行此操作?

2 个答案:

答案 0 :(得分:3)

Rails guides非常清楚地说明了这一点。

您需要where的参数化字符串参数:

Order.joins(:product).where('products.name like ?', '%fruity%')

通过将哈希值传递给ActiveRecord,你不能做更复杂的事情,然后进行基于等级和and的分组。如果你想要否定,或LIKEor,你需要编写SQL的参数化片段:

...where('name = ? or name = ?', 'joe', 'bob') # only way to get 'or'
...where('name != ?', 'john') # only way to get 'not equal'

从Rails 4开始,他们通过where.not解决了否定问题。

答案 1 :(得分:0)

squeel gem https://github.com/ernie/squeel#compound-conditions让你在不编写原始SQL的情况下执行此操作。