我有Product
模型和Order
模型。假设订单只有一个产品。
我想搜索产品名称中包含“fruity”
的所有订单以下查询允许我检索关联产品名称等于“fruity”
的所有订单Order.joins(:product).where(:products => {:name => "fruity"})
但我想要做的是使用LIKE
运算符。如何使用查询界面执行此操作?
答案 0 :(得分:3)
Rails guides非常清楚地说明了这一点。
您需要where
的参数化字符串参数:
Order.joins(:product).where('products.name like ?', '%fruity%')
通过将哈希值传递给ActiveRecord,你不能做更复杂的事情,然后进行基于等级和and
的分组。如果你想要否定,或LIKE
或or
,你需要编写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的情况下执行此操作。