Rails Active Record .where语句优化

Rails Active Record .where statement optimization

我正在构建一个电子商务网站,并希望使用活动记录 where 语句来查找特定供应商和特定装运状态范围内的装运。这是我现在拥有的:

Spree::Shipment.where("stock_location_id = ? and "state = ?", spree_current_user.supplier.stock_locations.first.stock_location_id, 'shipped' || 'ready')

我发现这只会返回 'shipped' 个语句。我希望它同时显示已发货和准备好的货物。到目前为止,我只能让它显示一个或另一个,具体取决于我是否将 'shipped' 或 'ready' 放在查询的第一位。

我猜我将 OR 运算符 (||) 放在了错误的位置,即使没有错误。谁能告诉我在 where 语句的条件中放置 OR 运算符的正确方法?

谢谢,

id = spree_current_user.supplier.stock_locations
       .first.stock_location_id
Spree::Shipment.where(stock_location_id: id, state: %w[shipped ready])

我在写更多的问题时想出了答案。我想分享答案,以防其他人遇到这个问题。这似乎可以解决问题:

Spree::Shipment.where("stock_location_id = ? and (state = ? or state = ?)", spree_current_user.supplier.stock_locations.first.id, 'shipped', 'ready')

我在控制台中对其进行了测试,它返回了这个 SQL 输出 并且在两个 'ready' 中都有发货'shipped' 状态:

Spree::Shipment Load (0.6ms)  SELECT  "spree_shipments".* FROM "spree_shipments"  WHERE (stock_location_id = 8 and (state = 'shipped' or state = 'ready')) LIMIT 15 OFFSET 0

希望这可以帮助到其他人。另外,如果您注意到此语句看起来很奇怪或效率低下,我真的很想知道。

谢谢!