使用する
- レール 3.2.8
- ルビー1.9.3
- Postgresql
- Ubuntu 12.10。
数か月レールから離れた後、レール検索を構築する方法を完全に忘れてしまったように感じます。
Orders has_many Items
.
アイテムの文字列status
はin_progress
, canceled
,completed
です。のブール値もありacquired
ます。
したがって、すべての 'ready to complete' を見つけたいと思います。つまり、 (statusおよび)orders
を持つアイテムが少なくとも 1 つあるすべてのアイテムと、in_progress でないアイテムはすべて statusまたは statusです。in_progress
acquired
canceled
completed
しかし、これらの条件をすべて満たしているアイテムを持つ Orders のみを返すクエリを作成する方法がわかりません。3 つのアイテムを注文しました。すべてが進行中で、1 つが取得済みです。
orders = Order.includes(:items).where(items: { status: "in_progress", acquired: true })
Order
これは、 を熱心にロードして 1Item
を返しacquired
ます。しかし、すべてのアイテムが基準を満たしているわけではないため、注文を返さないクエリが必要です。しかし、どこから始めればよいかわかりません。この問題を探すのは本当に大変でした。
少なくとも 1 つのアイテムが (in_progress
および) であり、またはでacquired
はないすべてのアイテムであり、すべてのアイテムがこのようであることを確認する必要があります。canceled
completed
正しい方向へのプッシュは大歓迎です!