Sha256: 70907a2886e061344bf6d12ee7c705c13a4ec35d4e5e192b07801309d2e1c8cf

Contents?: true

Size: 1002 Bytes

Versions: 7

Compression:

Stored size: 1002 Bytes

Contents

module Comfy::Cms::WithCategories

  extend ActiveSupport::Concern

  included do
    has_many :categorizations,
      as:         :categorized,
      class_name: "Comfy::Cms::Categorization",
      dependent:  :destroy
    has_many :categories,
      through:    :categorizations,
      class_name: "Comfy::Cms::Category"

    attr_accessor :category_ids

    after_save :sync_categories

    scope :for_category, ->(*categories) {
      if (categories = [categories].flatten.compact).present?
        distinct
          .joins(categorizations: :category)
          .where("comfy_cms_categories.label" => categories)
      end
    }
  end

  def sync_categories
    (category_ids || {}).each do |category_id, flag|
      case flag.to_i
      when 1
        if (category = Comfy::Cms::Category.find_by_id(category_id))
          category.categorizations.create(categorized: self)
        end
      when 0
        categorizations.where(category_id: category_id).destroy_all
      end
    end
  end

end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
comfortable_mexican_sofa-2.0.9 app/models/concerns/comfy/cms/with_categories.rb
comfortable_mexican_sofa-2.0.8 app/models/concerns/comfy/cms/with_categories.rb
comfortable_mexican_sofa-2.0.7 app/models/concerns/comfy/cms/with_categories.rb
comfortable_mexican_sofa-2.0.6 app/models/concerns/comfy/cms/with_categories.rb
comfortable_mexican_sofa-2.0.5 app/models/concerns/comfy/cms/with_categories.rb
comfortable_mexican_sofa-2.0.4 app/models/concerns/comfy/cms/with_categories.rb
comfortable_mexican_sofa-2.0.3 app/models/concerns/comfy/cms/with_categories.rb