From 3a836ad9c52959507555528f6371812d1a59647b Mon Sep 17 00:00:00 2001 From: Harry Bomrah Date: Mon, 8 Dec 2014 18:53:27 +0800 Subject: [PATCH] taggable modified for faster performance --- lib/orbit_tag/taggable.rb | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/lib/orbit_tag/taggable.rb b/lib/orbit_tag/taggable.rb index 35fe20c..cc45fea 100644 --- a/lib/orbit_tag/taggable.rb +++ b/lib/orbit_tag/taggable.rb @@ -10,29 +10,22 @@ module OrbitTag module ClassMethods def with_tags(tags=[]) tags = [tags].flatten.uniq - result = [] if tags.blank? self.all else - self.all.each do |taggable| - result << taggable if (taggable.taggings.map{|t| t.tag.id.to_s } & tags).size > 0 - end - self.where(:id.in=>result.map{|taggable| taggable.id}) + taggings = Tagging.where(:tag_id.in=>tags).map{|item| item.taggable_id} + self.where(:id.in=>taggings) end end def filter_by_tags(tags=[]) tags = OrbitHelper.page_tags if tags.blank? tags = [tags].flatten.uniq - result = [] - if tags.blank? or (tags.include?("all") rescue false) self.all else - self.all.each do |taggable| - result << taggable if (taggable.taggings.map{|t| t.tag.id.to_s } & tags).size > 0 - end - self.where(:id.in=>result.map{|taggable| taggable.id}) + taggings = Tagging.where(:tag_id.in=>tags).map{|item| item.taggable_id} + self.where(:id.in=>taggings) end end