From 05c3795e6a41851b0c35d71982ebd954a90066fd Mon Sep 17 00:00:00 2001 From: r888888888 Date: Wed, 19 Mar 2014 14:21:53 -0700 Subject: [PATCH] fixes #2110 --- app/controllers/forum_posts_controller.rb | 4 ++-- app/models/forum_post.rb | 12 +++++++++++- test/unit/forum_post_test.rb | 12 +++++++++++- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/app/controllers/forum_posts_controller.rb b/app/controllers/forum_posts_controller.rb index aaaf2caf2..21bb0037a 100644 --- a/app/controllers/forum_posts_controller.rb +++ b/app/controllers/forum_posts_controller.rb @@ -55,14 +55,14 @@ class ForumPostsController < ApplicationController def destroy @forum_post = ForumPost.find(params[:id]) check_privilege(@forum_post) - @forum_post.update_column(:is_deleted, true) + @forum_post.delete! respond_with(@forum_post) end def undelete @forum_post = ForumPost.find(params[:id]) check_privilege(@forum_post) - @forum_post.update_attribute(:is_deleted, false) + @forum_post.undelete! respond_with(@forum_post) end diff --git a/app/models/forum_post.rb b/app/models/forum_post.rb index ce6dc451a..bd3000ddb 100644 --- a/app/models/forum_post.rb +++ b/app/models/forum_post.rb @@ -119,8 +119,18 @@ class ForumPost < ActiveRecord::Base end end + def delete! + update_attribute(:is_deleted, true) + update_topic_updated_at_on_destroy + end + + def undelete! + update_attribute(:is_deleted, true) + update_topic_updated_at_on_create + end + def update_topic_updated_at_on_destroy - max = ForumPost.where(:topic_id => topic.id).maximum(:updated_at) + max = ForumPost.where(:topic_id => topic.id, :is_deleted => false).maximum(:updated_at) if max ForumTopic.update_all(["response_count = response_count - 1, updated_at = ?", max], {:id => topic.id}) else diff --git a/test/unit/forum_post_test.rb b/test/unit/forum_post_test.rb index 246848eda..f81fe10b8 100644 --- a/test/unit/forum_post_test.rb +++ b/test/unit/forum_post_test.rb @@ -26,6 +26,16 @@ class ForumPostTest < ActiveSupport::TestCase end end + context "that is deleted" do + should "update the topic's updated_at timestamp" do + @topic.reload + assert_equal(@posts[-1].updated_at.to_i, @topic.updated_at.to_i) + @posts[-1].delete! + @topic.reload + assert_equal(@posts[-2].updated_at.to_i, @topic.updated_at.to_i) + end + end + should "know which page it's on" do assert_equal(2, @posts[3].forum_topic_page) assert_equal(2, @posts[4].forum_topic_page) @@ -102,7 +112,7 @@ class ForumPostTest < ActiveSupport::TestCase context "that is deleted" do setup do @post = FactoryGirl.create(:forum_post, :topic_id => @topic.id) - @post.update_attribute(:is_deleted, true) + @post.delete! @topic.reload end