0
Order has_many TypeLogistic
しかし、重要なこと... Order
はTypeLogistic
を持っていません。両方ともOrder
& TypeLogistic
は、status_id
属性を持っています。この主な条件が満たされない場合子供の属性に基づいて親のためのRailsクエリ(子供が存在し、すべての子どもを見ている場合)
order.status_id = 4
- は、子供
- と
order
が子供type_logistics
を持っていない場合は、すべての子type_logistics
を持っている必要がありますについては何も無視:私はすべてのuniqのOrder
レコードを見つけたいですすなわちいずれか1のstatus_id
、または2(ない任意の他の数ではなくnull
)
...それらが見出されるレコードである
Order
status_id = 4
TypeLogistics
1 - status_id = 1
Order
status_id = 4
TypeLogistics
1 - status_id = 2
Order
status_id = 4
TypeLogistics
1 - status_id = 1
2 - status_id = 2
Order
status_id = 4
これらのは私が動作するコードの一部を書いた
# because order.status_id != 4
Order
status_id = 1
TypeLogistics
1 - status_id = 1
# because type_logistic child does not have a status_id that's 1 or 2
Order
status_id = 4
TypeLogistics
1 - status_id = nil
# because type_logistic child does not have a status_id that's 1 or 2
Order
status_id = 4
TypeLogistics
1 - status_id = 3
# because not all type_logistic children have a status_id that's 1 or 2
Order
status_id = 4
TypeLogistics
1 - status_id = 1
2 - status_id = nil
# because not all type_logistic children have a status_id that's 1 or 2
Order
status_id = 4
TypeLogistics
1 - status_id = 2
2 - status_id = 3
を見つけることはない記録であるが、それは純粋な
where
クエリではなく
select
を使用しているため、それは不格好です。私を助けてくれますか?
joins
を使用して
WORKING、SUB-PARのCODE
@orders = Order.includes(:type_logistics).where(status_id:4).select { |o| ([[1],[2],[1,2]].include? o.type_logistics.pluck(:status_id).uniq) || o.type_logistics.count == 0 }.uniq
残念ながら、これは機能しません。注文に2種類のロジスティクスがあり、そのうちの1つがステータス1または2(ただし、ステータスがnilまたはその他のもの)の場合は、 – james
が「はい」であることが判明しているので、1または2以外のステータスは明示的にロードしないでください。これは 'where.not(" type_logistics.status_id IN(?) "、[nil、3、4])'を追加することで指定できます。 –
しかし、問題は、どのstatus_idsを数えるべきではないかを明示する必要がありますが、可能なすべての数値を今すぐ伝えることができませんでした。 – james