diff --git a/app/models/categorization.rb b/app/models/categorization.rb index 296aa42..b895f86 100644 --- a/app/models/categorization.rb +++ b/app/models/categorization.rb @@ -1,12 +1,14 @@ module Categorization def add_category_to_object(category, object) - connection.execute("insert into #{table_name} (category_id, #{object_id_column}) values(#{category.id}, #{object.id})") + if !find(:first, :conditions => {object_id_column => object, :category_id => category} ) + connection.execute("insert into #{table_name} (category_id, #{object_id_column}) values(#{category.id}, #{object.id})") - c = category.parent - while !c.nil? && !self.find(:first, :conditions => {object_id_column => object, :category_id => c}) - connection.execute("insert into #{table_name} (category_id, #{object_id_column}, virtual) values(#{c.id}, #{object.id}, 1>0)") - c = c.parent + c = category.parent + while !c.nil? && !self.find(:first, :conditions => {object_id_column => object, :category_id => c}) + connection.execute("insert into #{table_name} (category_id, #{object_id_column}, virtual) values(#{c.id}, #{object.id}, 1>0)") + c = c.parent + end end end diff --git a/test/unit/article_categorization_test.rb b/test/unit/article_categorization_test.rb index aeec46e..7f3460e 100644 --- a/test/unit/article_categorization_test.rb +++ b/test/unit/article_categorization_test.rb @@ -61,4 +61,17 @@ class ArticleCategorizationTest < Test::Unit::TestCase end end + should 'not duplicate when adding the parent of a category by witch the article is already categorized' do + c1 = Category.create!(:name => 'c1', :environment => Environment.default) + c2 = c1.children.create!(:name => 'c2', :environment => Environment.default) + + p = create_user('testuser').person + a = p.articles.create!(:name => 'test') + + assert_difference ArticleCategorization, :count, 2 do + ArticleCategorization.add_category_to_article(c2, a) + ArticleCategorization.add_category_to_article(c1, a) + end + end + end -- libgit2 0.21.2