From c4f59660f0f2849aee78c2e7267cd12d434e2470 Mon Sep 17 00:00:00 2001 From: Rodrigo Souto Date: Fri, 13 Jun 2014 13:52:51 +0000 Subject: [PATCH] products-block: fetch sample products without load all products on the memory --- app/models/products_block.rb | 13 +++---------- test/unit/products_block_test.rb | 2 +- 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/app/models/products_block.rb b/app/models/products_block.rb index 1b429b8..7edc9d5 100644 --- a/app/models/products_block.rb +++ b/app/models/products_block.rb @@ -46,17 +46,10 @@ class ProductsBlock < Block def products(reload = false) if product_ids.blank? - products_list = owner.products(reload) - result = [] - [4, products_list.size].min.times do - p = products_list.rand - result << p - products_list -= [p] - end - result + owner.products.order('RANDOM()').limit([4,owner.products.count].min) else - product_ids.map {|item| owner.products.find(item) } - end + owner.products.where(:id => product_ids) + end.compact end end diff --git a/test/unit/products_block_test.rb b/test/unit/products_block_test.rb index f02b0c8..f0e2a15 100644 --- a/test/unit/products_block_test.rb +++ b/test/unit/products_block_test.rb @@ -86,7 +86,7 @@ class ProductsBlockTest < ActiveSupport::TestCase block.stubs(:owner).returns(enterprise) block.product_ids = [p1, p3, p5].map(&:id) - assert_equal [p1, p3, p5], block.products + assert_equivalent [p1, p3, p5], block.products end should 'save product_ids' do -- libgit2 0.21.2