mbleigh-acts-as-taggable-on 1.0.2 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -266,10 +266,12 @@ module ActiveRecord
266
266
 
267
267
  def related_search_options(context, klass, options = {})
268
268
  tags_to_find = self.tags_on(context).collect { |t| t.name }
269
+
270
+ exclude_self = "#{klass.table_name}.id != #{self.id} AND" if self.class == klass
269
271
 
270
272
  { :select => "#{klass.table_name}.*, COUNT(#{Tag.table_name}.id) AS count",
271
273
  :from => "#{klass.table_name}, #{Tag.table_name}, #{Tagging.table_name}",
272
- :conditions => ["#{klass.table_name}.id = #{Tagging.table_name}.taggable_id AND #{Tagging.table_name}.taggable_type = '#{klass.to_s}' AND #{Tagging.table_name}.tag_id = #{Tag.table_name}.id AND #{Tag.table_name}.name IN (?)", tags_to_find],
274
+ :conditions => ["#{exclude_self} #{klass.table_name}.id = #{Tagging.table_name}.taggable_id AND #{Tagging.table_name}.taggable_type = '#{klass.to_s}' AND #{Tagging.table_name}.tag_id = #{Tag.table_name}.id AND #{Tag.table_name}.name IN (?)", tags_to_find],
273
275
  :group => "#{klass.table_name}.id",
274
276
  :order => "count DESC"
275
277
  }.update(options)
@@ -9,7 +9,7 @@ module ActiveRecord
9
9
  def acts_as_tagger(opts={})
10
10
  has_many :owned_taggings, opts.merge(:as => :tagger, :dependent => :destroy,
11
11
  :include => :tag, :class_name => "Tagging")
12
- has_many :owned_tags, :through => :owned_taggings, :source => :tag
12
+ has_many :owned_tags, :through => :owned_taggings, :source => :tag, :uniq => true
13
13
  include ActiveRecord::Acts::Tagger::InstanceMethods
14
14
  extend ActiveRecord::Acts::Tagger::SingletonMethods
15
15
  end
@@ -49,4 +49,4 @@ module ActiveRecord
49
49
 
50
50
  end
51
51
  end
52
- end
52
+ end
@@ -103,6 +103,20 @@ describe "Acts As Taggable On" do
103
103
  taggable1.find_related_tags_for(OtherTaggableModel).should include(taggable3)
104
104
  taggable1.find_related_tags_for(OtherTaggableModel).should_not include(taggable2)
105
105
  end
106
+
107
+ it "should not include the object itself in the list of related objects" do
108
+ taggable1 = TaggableModel.create!(:name => "Taggable 1")
109
+ taggable2 = TaggableModel.create!(:name => "Taggable 2")
110
+
111
+ taggable1.tag_list = "one"
112
+ taggable1.save
113
+
114
+ taggable2.tag_list = "one, two"
115
+ taggable2.save
116
+
117
+ taggable1.find_related_tags.should include(taggable2)
118
+ taggable1.find_related_tags.should_not include(taggable1)
119
+ end
106
120
  end
107
121
 
108
122
  describe 'Tagging Contexts' do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mbleigh-acts-as-taggable-on
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Bleigh