から3.1実践:ベストRailsのを考えると複雑なクエリ
(モデル):例えば
Contract (has_many :invoices, belongs_to :user)
Invoice (belongs_to :contract)
この方法で、この場合には
my_contracts = Contract.where(user_id: current_user.id) #=> [#<Contract id: 1, title: "1">, #<Contract id: 2, title: "2">]
は、我々はユーザーのための2件の契約を持っています。また、各契約には複数の請求書があります。
ここで、契約ごとにすべての請求書を集め、 'updated_at'でソートする必要があります。
all_invoices = my_contracts.map{|i| i.invoices.sort_by(&:updated_at)}
が、ActiveRecordのを使用して: 何かのように。
どのように正しく行うことができましたか?
それはInvoice.joins(:contracts).where(user_id: current_user.id).order(:updated_at)
ARELは鉱山(まだそれで作業する必要がある)の強いスーツではありませんが、これが動作しない場合、それは少なくともにあなたが近づく必要があるようなものでなければなりません
わからない参照が、 'は契約と請求書テーブルの両方にあるので、updated_atにあいまいなエラーが出る可能性がありますか? '.order(" invoices.updated_at ")'が必要かもしれません。 – house9
それは本当です。これらは、 'Invoice.joins(:contracts).where(user_id:current_user.id).order(:updated_at).to_sql'を使ってレールコンソールで試してみて、生成されたSQLを見るのがベストです。 (そして、自然にテストケースにすべてをチェックさせるべきです;-)) –