46 lines
970 B
Ruby
46 lines
970 B
Ruby
module OrbitCategory
|
|
module Categorizable
|
|
|
|
def self.included(base)
|
|
base.extend ClassMethods
|
|
base.class_eval 'categorizable'
|
|
end
|
|
|
|
module ClassMethods
|
|
|
|
def categorizable
|
|
class_eval do
|
|
field :category_id, type: BSON::ObjectId
|
|
has_one :buffer_category, as: :categorizable, autosave: true, dependent: :destroy
|
|
accepts_nested_attributes_for :buffer_category, allow_destroy: true
|
|
end
|
|
send :include, InstanceMethods
|
|
end
|
|
end
|
|
|
|
module InstanceMethods
|
|
|
|
def remove_id(id)
|
|
self.update_attribute(:category_id, id)
|
|
end
|
|
|
|
def category
|
|
self.buffer_category.category if self.buffer_category
|
|
end
|
|
|
|
def category=(id)
|
|
self.buffer_category.destroy if self.buffer_category
|
|
self.build_buffer_category(category_id: id)
|
|
self.category_id = id
|
|
end
|
|
|
|
def disable?
|
|
category.disable?
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|