Sha256: aa6f338b0d87be50c3721a494dd563dd4e6ad6ff251392229c70fae2d0f9a7c6

Contents?: true

Size: 1014 Bytes

Versions: 3

Compression:

Stored size: 1014 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?
        self.distinct.
          joins(categorizations: :category).
          where("comfy_cms_categories.label" => categories)
      end
    }
  end

  def sync_categories
    (self.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
        self.categorizations.where(category_id: category_id).destroy_all
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
comfortable_mexican_sofa-2.0.2 app/models/concerns/comfy/cms/with_categories.rb
comfortable_mexican_sofa-2.0.1 app/models/concerns/comfy/cms/with_categories.rb
comfortable_mexican_sofa-2.0.0 app/models/concerns/comfy/cms/with_categories.rb