Class: Spree::Taxons::AddProducts
- Inherits:
-
Object
- Object
- Spree::Taxons::AddProducts
- Includes:
- ServiceModule::Base
- Defined in:
- app/services/spree/taxons/add_products.rb
Instance Method Summary collapse
-
#call(taxons:, products:) ⇒ Spree::ServiceModule::Base::Result
Creates classifications for the given taxons and products in bulk.
Methods included from ServiceModule::Base
Instance Method Details
#call(taxons:, products:) ⇒ Spree::ServiceModule::Base::Result
Creates classifications for the given taxons and products in bulk.
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'app/services/spree/taxons/add_products.rb', line 11 def call(taxons:, products:) return if taxons.blank? || products.blank? # build the params for the insert_all classifications_params = taxons.pluck(:id).flat_map do |taxon_id| position = Spree::Classification.where(taxon_id: taxon_id).count products.pluck(:id).map do |product_id| { taxon_id: taxon_id, product_id: product_id, position: (position += 1), created_at: Time.current, updated_at: Time.current } end end # doing a quick insert_all here to avoid the overhead of instantiating Spree::Classification.insert_all(classifications_params) # clearing cache Spree::Product.where(id: products.pluck(:id)).touch_all taxon_ids = taxons.pluck(:id) Spree::Taxon.where(id: taxon_ids).touch_all Spree::Taxons::TouchFeaturedSections.call(taxon_ids: taxon_ids) success(true) end |