1
私が取り組んでいるクエリに問題があります。私はこれに条件を入れたいと思う。railsが条件付きでクエリに参加します
FooDiscount.where(bar_code_id: object.id).joins(foo: [:foo_items]).sum(:quantity)
これは私が必要とする正確な数量を返しますが、私は私が唯一の更新
foo.order_status.code != "cancelled"
場合
foo_items
を返すようにしたい
.joins(foo: [:foo_items])
に条件を追加するために探しています:私はしなかった以前の
foo
には、order_statuses
があります。そのクエリは私に間違った結果を与えています。混乱させて申し訳ありません。
ました'foo' has_many:order_statusとは異なる状態にあります(いくつかは 'キャンセル'されていますが、現在のものは 'open'です)。次に、現在の可能性を気にするだけならば、' has_one:current_order_status'というアソシエーションを作成したいでしょう。彼がこれまでにキャンセルされているかどうか気にするならば、 'has_many:cancelled_order_status' – drhenner
@drhennerは、OPのfoo.order_status.codeからhas_oneと判断していますので、躊躇しないでください) –
それはbelongs_tより速いクエリは、== "cancelled"という 'order_status_id'をキャッシュすることです。追加のorder_status joinを使わずに '.where.not(foo:{order_status_id:OrderStatus.CANCELED_ID})'を実行しました – drhenner