chris tags update
This commit is contained in:
1 parent
2945e14385
commit
d047a3d62a
102 files changed
+3111
-378
No files matched your search
@@ -0,0 +1,3 @@
|
||||
# require "action_view"
|
||||
|
||||
require "orbit_tag/taggable"
|
||||
@@ -0,0 +1,77 @@
|
||||
module OrbitTag
|
||||
module Taggable
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
module ClassMethods
|
||||
|
||||
def taggable
|
||||
init_tag
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def init_tag
|
||||
class_eval do
|
||||
field :tags_to_destroy, type: Array, default: []
|
||||
|
||||
has_many :taggings, as: :taggable, autosave: true, dependent: :destroy
|
||||
accepts_nested_attributes_for :taggings, allow_destroy: true
|
||||
after_save :remove_taggings, unless: Proc.new{self.tags_to_destroy.blank?}
|
||||
|
||||
def tags
|
||||
self.taggings.blank? ? [] : self.taggings.map{|t| t.tag}
|
||||
end
|
||||
|
||||
def tags=(tag_ids)
|
||||
tag_ids = [tag_ids].flatten
|
||||
tag_ids.delete('')
|
||||
ids = self.taggings.blank? ? [] : self.taggings.map{|t| t.tag.id}
|
||||
tag_ids.each do |tag_id|
|
||||
unless ids.include? tag_id
|
||||
self.taggings.build(tag_id: tag_id)
|
||||
end
|
||||
end
|
||||
self.tags_to_destroy = self.taggings.where(:tag_id.in => (ids - tag_ids)).map{|t| t.id}
|
||||
end
|
||||
|
||||
def tag_ids
|
||||
self.taggings.blank? ? [] : self.taggings.map{|t| t.tag.id}
|
||||
end
|
||||
|
||||
def tag_ids=(ids)
|
||||
self.tags = ids
|
||||
end
|
||||
|
||||
def sorted_tags
|
||||
if tags.blank?
|
||||
[]
|
||||
else
|
||||
tag_array = tags.inject([]){ |result, value|
|
||||
result << [value.name, value]
|
||||
}
|
||||
tag_array.sort.map{|x| x[1] }
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def remove_taggings
|
||||
self.taggings.where(:_id.in => self.tags_to_destroy).destroy
|
||||
self.class.without_callback(:save, :after, :remove_taggings) do
|
||||
self.update_attribute(:tags_to_destroy, [])
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
module Tagging
|
||||
extend OrbitCoreLib::AppBackendUtility
|
||||
def get_tags
|
||||
@module_app ? @module_app.tags : Tag.all
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in new issue
Block a user