2015-09-01 35 views
1

我有一張表格,顯示了每位客戶的所有客戶和所有工作。爲了加快頁面加載速度,我必須急切地加載相關的作業,如下所示。Rails:急於加載外連接的關聯記錄

但是,有兩個問題這種方法:

  1. Customers沒有工作沒有得到,甚至裝,雖然沒有joins()方法

  2. 我不得不使用慢Ruby通過jobs.id爲每位客戶排序工作。

有沒有解決方法?

# http://guides.rubyonrails.org/active_record_querying.html#specifying-conditions-on-eager-loaded-associations 
@customers = Customer.all.includes(:jobs).where(jobs: {booking_status: [2,3]}).order('users.id ASC').references(:jobs) 

@customers.each do |customer| 
    puts customer.full_name 
    jobs = customer.jobs.sort_by {|job| job.id} 
    jobs.each do |job| 
    puts job.id 
+1

你沒有得到非 - 由於您的where條款而打的客戶。你說的是你只想要具有特定booking_status的客戶。嘗試用下面的東西替換你的where子句:'where(「jobs.booking_status =?OR count(jobs)=?」,[2,3],0)' – Nathan

回答

1

添加的has_many客戶

has_many :special_jobs, -> { where(booking_status: [2,3]).order(:id) }, :class_name => 'Job' 

然後做

@customers = Customer.includes(:special_jobs).order(:id) 

然後在視圖指customer.special_jobs

# this is haml 
- @customers.each do |customer| 
    %tr 
    %td= customer.name 
    %td= customer.special_jobs.map { |job| link_to(job.name, job) }.join(', ') 
+0

工程就像一個魅力。小拼寫錯誤:'Customer.includes'帶s。 – migu

+0

修復它,謝謝。 – Swards