2016-09-23 112 views
1

我遇到了我一直在处理的查询的问题。我想包含一个条件。rails加入条件查询

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可以有__ __ _ __ __ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _所以这个查询给了我不正确的结果。对困惑感到抱歉。

回答

1

如果order_status是DB支持的模式应该是沿着这些路线的东西(可能与单/复数的问题,但你的想法):

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 
+0

我正要竖起大拇指,但如果'foo' has_many:order_status和它们处于不同的状态(如某些'取消',但当前是'打开')会发生什么情况然后,他希望创建一个关联'has_one:current_order_status',如果只关心当前可能或'has_many:canceled_order_status'如果他关心它是否曾经被取消 – drhenner

+0

@drhenner从OP的foo.order_status.code判断它的has_one,所以不要犹豫,竖起大拇指;) –

+0

如果它是一个belongs_t o更快的查询将缓存==“取消”的'order_status_id'。然后'.where.not(foo:{order_status_id:OrderStatus.CANCELED_ID})'没有额外的order_status加入 – drhenner