使用する
- レール 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_progressacquiredcanceledcompleted
しかし、これらの条件をすべて満たしているアイテムを持つ Orders のみを返すクエリを作成する方法がわかりません。3 つのアイテムを注文しました。すべてが進行中で、1 つが取得済みです。
orders = Order.includes(:items).where(items: { status: "in_progress", acquired: true })
Orderこれは、 を熱心にロードして 1Itemを返しacquiredます。しかし、すべてのアイテムが基準を満たしているわけではないため、注文を返さないクエリが必要です。しかし、どこから始めればよいかわかりません。この問題を探すのは本当に大変でした。
少なくとも 1 つのアイテムが (in_progressおよび) であり、またはでacquiredはないすべてのアイテムであり、すべてのアイテムがこのようであることを確認する必要があります。canceledcompleted
正しい方向へのプッシュは大歓迎です!