我在处理一个查询时遇到问题。我想在这里面加个条件。

FooDiscount.where(bar_code_id: object.id).joins(foo: [:foo_items]).sum(:quantity)

这将返回我需要的正确数量,但我想添加一个条件到.joins(foo: [:foo_items])如果foo_items
更新:
早些时候我没有提到foo.order_status.code != "cancelled"可以有很多foo。所以那个查询给了我不正确的结果。对不起,我有点困惑。

最佳答案

如果order_status是一个数据库支持的模型,那么它应该是这样的(可能是单数/复数的问题,但是您得到了这个想法):

FooDiscount
  .where(bar_code_id: object.id)
  .joins(foo: [:foo_items, :order_statuses])          # edit joining
  .where.not(order_statuses: { code: 'cancelled' }) # your condition
  .sum('foo_discounts.quantity')                    # ensure no issues with determining,
                                                    # which table's column quantity is

10-07 15:49