2017-06-16 113 views
0

A product有很多uploads,並且import有很多products。 我想要獲取與給定導入產品鏈接的所有上傳內容。最有效的方法得到一組記錄的has_many關係

下面是我在做什麼:

@import = Import.includes(products: [:uploads]).find(params[:id]) 
@products = @import.products 
@uploads= @products.map{|product| product.uploads.where.not(file: nil)}.flatten 

但似乎非常低效。 還有其他解決方案嗎?

+0

你需要加載所有的產品及其上傳您的意見或只是操縱數據? – bkunzi01

+0

我確實需要加載所有產品並上傳視圖 –

回答

0

關於如何:

@import = Import.includes(:products).find(params[:id]) 
@products = @import.products.pluck(:id) 
@uploads = Upload.where(products_id: [@products]).where.not(file: nil) 

普呂克避免insantiating每條記錄,然後直接從數據庫中抓住的ID。這應該可以節省用迭代器實例化每個產品的時間。

3

由於import有很多products我假設product屬於import;如果是的話,你可以嘗試查詢products,像這樣:

@uploads = Product.where(import_id: params[:id]).joins(:uploads).where.not(file: nil) 
+0

我更喜歡這個! – bkunzi01

相關問題