获得记录数组的has_many关系的最有效方法

时间:2017-06-16 12:35:45

标签: ruby-on-rails activerecord

product有很多uploadsimport有很多products。 我希望将所有上传链接到给定导入的产品。

以下是我正在做的事情:

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

但似乎效率很低。 还有其他解决方案吗?

2 个答案:

答案 0 :(得分:3)

由于import有很多products我认为product属于import;如果是这样,您可以尝试查询products,如下所示:

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

答案 1 :(得分:0)

怎么样:

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

Pluck避免对每条记录进行实例化并直接从数据库中获取id。这可以节省使用map迭代器实例化每个产品的时间。