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

Ruby on rails 具有关联的活动记录查询中的LIKE运算符,ruby-on-rails,activerecord,ruby-on-rails-4,Ruby On Rails,Activerecord,Ruby On Rails 4,我有产品型号和订单型号。假设一个订单只有一个产品 我想搜索所有产品名称中有“水果”一词的订单 下面的查询允许我检索关联产品名称等于“fruity”的所有订单 但是我想做的是像操作符一样使用。如何使用查询界面进行此操作?用户可以非常清楚地进行布局 您需要一个参数化的字符串参数来其中: Order.joins(:product).where('products.name like ?', '%fruity%') 通过将哈希传递给ActiveRecord,您无法完成比基于等式和以及的分组更复杂的事情

我有
产品
型号和
订单
型号。假设一个订单只有一个产品

我想搜索所有产品名称中有“水果”一词的订单

下面的查询允许我检索关联产品名称等于“fruity”的所有订单

但是我想做的是像操作符一样使用
。如何使用查询界面进行此操作?

用户可以非常清楚地进行布局

您需要一个参数化的字符串参数来
其中

Order.joins(:product).where('products.name like ?', '%fruity%')
通过将哈希传递给ActiveRecord,您无法完成比基于等式和
以及
的分组更复杂的事情;如果您想要求反,或像
,或
,则需要编写SQL的参数化片段:

...where('name = ? or name = ?', 'joe', 'bob') # only way to get 'or'
...where('name != ?', 'john') # only way to get 'not equal'
从Rails 4开始,他们已经通过解决否定问题。

非常清楚地阐述了这一点

您需要一个参数化的字符串参数来
其中

Order.joins(:product).where('products.name like ?', '%fruity%')
通过将哈希传递给ActiveRecord,您无法完成比基于等式和
以及
的分组更复杂的事情;如果您想要求反,或像
,或
或,则需要编写SQL的参数化片段:

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

从Rails 4开始,他们已经通过解决了否定问题。

使用
squel
gem可以不用编写原始SQL来实现。

使用
squel
gem可以不用编写原始SQL来实现。

使用
模型在Rails 4中实现否定。where.not
语法。很有趣,我不知道。你可以在Rails 4中用
模型进行否定。where.not
语法。有趣的是,我不知道。