다음과 같은 관계가 있습니다. 공급 업체 이름, 클라이언트 이름, INV 아니, INV 트란 날짜 및 식사 정렬 순서하지만 마지막 송장 거래를 통해 :레일즈 액티브 레코드 다중 조인을 통한 주문
AdhocBkg
has_many :invoice_trans
InvoiceTran
belongs_to :invoice_hdr
belongs_to :meal
InvoiceHdr
belongs_to :supplier
belongs_to :client
은 내가 '청구'상태로 모든 AdhocBkgs를 꺼내 다음 기준으로 정렬 할 필요가 각 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
절을 사용하여 코드를 리팩토링 할 수 있었는지 궁금해서이 작업을 가속화하는 데 도움이 될 수 있습니다. 그러나 레일즈 액티브 레코드 '찾기'문이 위의 내용에 맞는지 확인해 낼 수는 없습니다.
저는 Rails 3.2.1, Ruby 1.9.3p0 및 MySQL 5.1을 Ubuntu 11.04에서 사용하고 있습니다.
굉장한 것처럼 보입니다. 나는 내일 아침에 시험해보고 결과를 알려줄거야. 고마워. 작동하지 않더라도 중첩 된 조인을 수행하는 방법을 배웠습니다. 그 값어치가 금으로 가치가 있습니다. 그런데 마지막 거래가 최대 ID를 가진 거래입니다. Purvez – nexar
환상적이었습니다 !! 주로 테이블의 철자법 인 사소한 변경을해야했지만 다른 사용자를 던질 수있는 유일한 것은 'where'절이 었습니다. invoice_trans.id = (invoice_trans에서 max (id)를 선택하십시오. invoice_trans.id = (invoice_trans에서 max (id)를 선택하십시오. 항목을 강조하기 위해 대문자로 'AS'를 넣었지만 물론 소문자 여야합니다. 주요한 것은 이전 코드에서 리턴하는 데 약 50 초가 걸렸습니다. 결과 .5 초 미만입니다 !! 결과! 감사합니다. – nexar
감사를 정정했습니다. 감사합니다. – HargrimmTheBleak