Commit c4f59660f0f2849aee78c2e7267cd12d434e2470

Authored by Rodrigo Souto
1 parent 5da04adb

products-block: fetch sample products without load all products on the memory

ActionItem3167
app/models/products_block.rb
... ... @@ -46,17 +46,10 @@ class ProductsBlock < Block
46 46  
47 47 def products(reload = false)
48 48 if product_ids.blank?
49   - products_list = owner.products(reload)
50   - result = []
51   - [4, products_list.size].min.times do
52   - p = products_list.rand
53   - result << p
54   - products_list -= [p]
55   - end
56   - result
  49 + owner.products.order('RANDOM()').limit([4,owner.products.count].min)
57 50 else
58   - product_ids.map {|item| owner.products.find(item) }
59   - end
  51 + owner.products.where(:id => product_ids)
  52 + end.compact
60 53 end
61 54  
62 55 end
... ...
test/unit/products_block_test.rb
... ... @@ -86,7 +86,7 @@ class ProductsBlockTest &lt; ActiveSupport::TestCase
86 86 block.stubs(:owner).returns(enterprise)
87 87  
88 88 block.product_ids = [p1, p3, p5].map(&:id)
89   - assert_equal [p1, p3, p5], block.products
  89 + assert_equivalent [p1, p3, p5], block.products
90 90 end
91 91  
92 92 should 'save product_ids' do
... ...