From 37c954cff46dffe300385f9ea3b4c0f00a75651e Mon Sep 17 00:00:00 2001 From: Nathan Hessler Date: Tue, 27 Jul 2010 08:43:54 -0400 Subject: [PATCH] corrected the relation condition on context_taggings and added tests. tests fail given previous coditions. --- .../acts_as_taggable_on/core.rb | 4 ++-- spec/acts_as_taggable_on/taggable_spec.rb | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/lib/acts_as_taggable_on/acts_as_taggable_on/core.rb b/lib/acts_as_taggable_on/acts_as_taggable_on/core.rb index 98b42b23f..4a7f56327 100644 --- a/lib/acts_as_taggable_on/acts_as_taggable_on/core.rb +++ b/lib/acts_as_taggable_on/acts_as_taggable_on/core.rb @@ -21,7 +21,7 @@ def initialize_acts_as_taggable_on_core class_eval do has_many context_taggings, :as => :taggable, :dependent => :destroy, :include => :tag, :class_name => "ActsAsTaggableOn::Tagging", - :conditions => ["#{ActsAsTaggableOn::Tagging.table_name}.tagger_id IS NULL AND #{ActsAsTaggableOn::Tagging.table_name}.context = ?", tags_type] + :conditions => ["#{ActsAsTaggableOn::Tagging.table_name}.tag_id = #{ActsAsTaggableOn::Tag.table_name}.id AND #{ActsAsTaggableOn::Tagging.table_name}.context = ?", tags_type] has_many context_tags, :through => context_taggings, :source => :tag, :class_name => "ActsAsTaggableOn::Tag" end @@ -249,4 +249,4 @@ def save_tags end end end -end \ No newline at end of file +end diff --git a/spec/acts_as_taggable_on/taggable_spec.rb b/spec/acts_as_taggable_on/taggable_spec.rb index 737eaae15..7cc654dd6 100644 --- a/spec/acts_as_taggable_on/taggable_spec.rb +++ b/spec/acts_as_taggable_on/taggable_spec.rb @@ -4,6 +4,7 @@ before(:each) do clean_database! @taggable = TaggableModel.new(:name => "Bob Jones") + @taggables = [@taggable, TaggableModel.new(:name => "John Doe")] end it "should have tag types" do @@ -68,6 +69,22 @@ @taggable.should have(2).skills end + it "should be able to select taggables by subset of tags using ActiveRelation methods" do + @taggables[0].tag_list = "bob" + @taggables[1].tag_list = "charlie" + @taggables[0].skill_list = "ruby" + @taggables[1].skill_list = "css" + @taggables.each{|taggable| taggable.save} + + @found_taggables_by_tag = TaggableModel.joins(:tags).where(:tags => {:name => ["bob"]}) + @found_taggables_by_skill = TaggableModel.joins(:skills).where(:tags => {:name => ["ruby"]}) + + @found_taggables_by_tag.should include @taggables[0] + @found_taggables_by_tag.should_not include @taggables[1] + @found_taggables_by_skill.should include @taggables[0] + @found_taggables_by_skill.should_not include @taggables[1] + end + it "should be able to find by tag" do @taggable.skill_list = "ruby, rails, css" @taggable.save