私には次のような関係があります。
AdhocBkg
has_many :invoice_trans
InvoiceTran
belongs_to :invoice_hdr
belongs_to :meal
InvoiceHdr
belongs_to :supplier
belongs_to :client
「請求済み」ステータスのすべてのAdhocBkgを引き出してから、サプライヤー名、クライアント名、inv番号、invトランデート、食事の並べ替え順序で並べ替える必要がありますが、各AdhocBkgの最後の請求書トランザクションを使用します。
私の現在のコードは:
#AdhocBkg Billed Status ID
abbilledstatusid = AdhocBkgStatus.find_by_abstatdesc('Billed').id
@adhocbkgs = AdhocBkg.find_all_by_abstatusid(abbilledstatusid)
@adhocbkgs.sort! {|x,y| x.invoice_trans.last.invoice_hdr.supplier.suppname + x.invoice_trans.last.invoice_hdr.client.clientname + x.invoice_trans.last.invoice_hdr.invno.to_s + x.invoice_trans.last.invtrndate.strftime('%Y%m%d') + x.invoice_trans.last.meal.mealsortseq.to_s <=> y.invoice_trans.last.invoice_hdr.supplier.suppname + y.invoice_trans.last.invoice_hdr.client.clientname + y.invoice_trans.last.invoice_hdr.invno.to_s + y.invoice_trans.last.invtrndate.strftime('%Y%m%d') + y.invoice_trans.last.meal.mealsortseq.to_s }
上記は機能しますが、データベースへの複数の読み取りが原因で非常に遅くなり、実際の並べ替えが疑われます。:include
どちらかまたは句を使用するようにコードをリファクタリングする方法を考えていました。これにより、これを高速化できる可能性があり:joins
ます。:order
ただし、上記のRailsActiveレコードの「find」ステートメントがどうあるべきかを理解することはできません。
Ubuntu11.04でRails3.2.1、Ruby 1.9.3p0、MySQL5.1を使用しています。