69 lines
1.6 KiB
Ruby
69 lines
1.6 KiB
Ruby
# == Schema Information
|
|
#
|
|
# Table name: categories
|
|
#
|
|
# id :integer not null, primary key
|
|
# parent_id :integer default(0), not null
|
|
# level_depth :integer default(0), not null
|
|
# name :string(255) not null
|
|
# slug :string(255) not null
|
|
# active :boolean default(TRUE), not null
|
|
# created_at :datetime
|
|
# created_by :bigint(8)
|
|
# updated_at :datetime
|
|
# updated_by :bigint(8)
|
|
#
|
|
|
|
# Categories
|
|
class Category < ApplicationRecord
|
|
extend FriendlyId
|
|
extend ActsAsTree::TreeWalker
|
|
include FriendlyFinder
|
|
|
|
acts_as_tree order: 'name'
|
|
friendly_id :name, use: :slugged
|
|
has_and_belongs_to_many :products
|
|
has_one :image, as: :imageable, dependent: :destroy
|
|
|
|
validates :name, presence: true
|
|
|
|
after_update :a_update
|
|
|
|
def should_generate_new_friendly_id?
|
|
slug.blank? || will_save_change_to_attribute?(:name)
|
|
end
|
|
|
|
def created_name
|
|
Admin.find(updated_by).description
|
|
end
|
|
|
|
def created_date
|
|
updated_at.to_date
|
|
end
|
|
|
|
def active_products
|
|
products.where('active = 1').order('name ASC')
|
|
end
|
|
|
|
def active_childrens
|
|
Category.where(parent_id: id, active: true).order('name ASC')
|
|
end
|
|
|
|
def a_update
|
|
return unless saved_change_to_attribute?(:slug)
|
|
# preprocess images
|
|
image.change_filename(attribute_before_last_save(:slug), slug)
|
|
end
|
|
|
|
# returns image of category, if category don't have own image returns first
|
|
# product cover image
|
|
def cover_image
|
|
im = image
|
|
if im.blank?
|
|
pr = active_products.first
|
|
im = pr.cover_image unless pr.blank?
|
|
end
|
|
im
|
|
end
|
|
end
|