diff --git a/app/models/article_block.rb b/app/models/article_block.rb index 135738d..1761af9 100644 --- a/app/models/article_block.rb +++ b/app/models/article_block.rb @@ -19,7 +19,14 @@ class ArticleBlock < Block def article(reload = false) @article = nil if reload if @article || article_id - @article = Article.find(article_id) + begin + @article = Article.find(article_id) + rescue ActiveRecord::RecordNotFound + # dangling reference, clear it + @article = nil + self.article_id = nil + self.save! + end end @article end diff --git a/test/unit/article_block_test.rb b/test/unit/article_block_test.rb index dd072cd..e494b1f 100644 --- a/test/unit/article_block_test.rb +++ b/test/unit/article_block_test.rb @@ -30,4 +30,26 @@ class ArticleBlockTest < Test::Unit::TestCase end + should 'not crash when referenced article is removed' do + person = create_user('testuser').person + a = person.articles.create!(:name => 'test') + block = ArticleBlock.create(:article => a) + person.boxes.first.blocks << block + block.save! + + a.destroy + block.reload + assert_nil block.article + end + + should 'nullify reference to unexisting article' do + Article.delete_all + + block = ArticleBlock.new + block.article_id = 999 + + block.article + assert_nil block.article_id + end + end -- libgit2 0.21.2