Advertisement
Guest User

Untitled

a guest
Dec 18th, 2014
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.90 KB | None | 0 0
  1. Spree::Variant.class_eval do
  2. scope :with_distinct_images, -> {
  3. ordered_ids = pluck("`spree_variants`.`id`")
  4. variant_assets_sql = "SELECT MD5(GROUP_CONCAT(`spree_assets`.`image_type`, `spree_assets`.`attachment_file_name`)) FROM `spree_assets`
  5. WHERE `spree_assets`.`type` IN ('Spree::Image') AND `spree_assets`.`viewable_id` = `spree_variants`.`id` AND `spree_assets`.`viewable_type` = 'Spree::Variant'
  6. ORDER BY `spree_assets`.`image_type` ASC, `spree_assets`.`attachment_file_name` ASC"
  7. variant_product_assets_sql = "SELECT MD5(GROUP_CONCAT(`spree_assets`.`image_type`, `spree_assets`.`attachment_file_name`)) FROM `spree_assets`
  8. INNER JOIN `spree_products` ON `spree_products`.`deleted_at` IS NULL
  9. INNER JOIN `spree_variants` `variants_including_masters_spree_products_join` ON `variants_including_masters_spree_products_join`.`product_id` = `spree_products`.`id` AND `variants_including_masters_spree_products_join`.`is_master` = 1 AND `variants_including_masters_spree_products_join`.`deleted_at` IS NULL
  10. WHERE `spree_products`.`id` = `spree_variants`.`product_id` AND `spree_assets`.`type` IN ('Spree::Image') AND `spree_assets`.`viewable_id` = `variants_including_masters_spree_products_join`.`id` AND `spree_assets`.`viewable_type` = 'Spree::Variant'
  11. ORDER BY `spree_assets`.`image_type` ASC, `spree_assets`.`attachment_file_name` ASC"
  12.  
  13. sql = select("MAX(`spree_variants`.`id`) AS id, IFNULL((#{variant_assets_sql}), (#{variant_product_assets_sql})) AS md5")
  14. .group("md5").to_sql
  15. scoped = select("`spree_variants`.*, IFNULL((#{variant_assets_sql}), (#{variant_product_assets_sql})) AS md5")
  16. .joins("INNER JOIN (#{sql}) AS `spree_variants_md5` ON `spree_variants_md5`.`id` = `spree_variants`.`id` AND `spree_variants_md5`.`md5` = md5")
  17. scoped = scoped.order("FIELD(`spree_variants_md5`.`id`, #{ordered_ids.join(', ')})") unless ordered_ids.empty?
  18. scoped
  19. }
  20. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement