diff --git a/app/models/article.rb b/app/models/article.rb index a99defd..d773f58 100644 --- a/app/models/article.rb +++ b/app/models/article.rb @@ -154,6 +154,12 @@ class Article < ActiveRecord::Base article.advertise = true end + before_save do |article| + article.parent = article.parent_id ? Article.find(article.parent_id) : nil + parent_path = article.parent ? article.parent.path : nil + article.path = [parent_path, article.slug].compact.join('/') + end + # retrieves all articles belonging to the given +profile+ that are not # sub-articles of any other article. named_scope :top_level_for, lambda { |profile| diff --git a/test/unit/article_test.rb b/test/unit/article_test.rb index 60eb4a9..68b6223 100644 --- a/test/unit/article_test.rb +++ b/test/unit/article_test.rb @@ -1782,4 +1782,22 @@ class ArticleTest < ActiveSupport::TestCase assert_equal license, article.license end + should 'update path if parent is changed' do + f1 = Folder.create!(:name => 'Folder 1', :profile => profile) + f2 = Folder.create!(:name => 'Folder 2', :profile => profile) + article = TinyMceArticle.create!(:name => 'Sample Article', :parent_id => f1.id, :profile => profile) + assert_equal [f1.path,article.slug].join('/'), article.path + + article.parent = f2 + article.save! + assert_equal [f2.path,article.slug].join('/'), article.path + + article.parent = nil + article.save! + assert_equal article.slug, article.path + + article.update_attributes({:parent_id => f2.id}) + assert_equal [f2.path,article.slug].join('/'), article.path + end + end -- libgit2 0.21.2