Remove root_guid from reshares when post is deleted

And cleanup old reshares with deleted root posts

closes #7578
This commit is contained in:
Benjamin Neff 2017-08-24 22:24:06 +02:00
parent 0f771dbb10
commit b040f85790
No known key found for this signature in database
GPG key ID: 971464C3F1A90194
4 changed files with 23 additions and 0 deletions

View file

@ -5,6 +5,7 @@
* Remove Internet Explorer workarounds [#7557](https://github.com/diaspora/diaspora/pull/7557)
* Sort notifications by last interaction [#7568](https://github.com/diaspora/diaspora/pull/7568)
* Remove tiff support from photos [#7576](https://github.com/diaspora/diaspora/pull/7576)
* Remove reference from reshares when original post is deleted [#7578](https://github.com/diaspora/diaspora/pull/7578)
## Bug fixes
* Fix displaying polls with long answers [#7579](https://github.com/diaspora/diaspora/pull/7579)

View file

@ -33,6 +33,10 @@ class Post < ApplicationRecord
self.touch(:interacted_at)
end
before_destroy do
reshares.update_all(root_guid: nil) # rubocop:disable Rails/SkipsModelValidations
end
#scopes
scope :includes_for_a_stream, -> {
includes(:o_embed_cache,

View file

@ -0,0 +1,9 @@
class CleanupRootGuidsFromReshares < ActiveRecord::Migration[5.1]
def up
# rubocop:disable Rails/SkipsModelValidations
Reshare.joins("LEFT OUTER JOIN posts as root ON root.guid = posts.root_guid")
.where("root.id is NULL AND posts.root_guid is NOT NULL")
.update_all(root_guid: nil)
# rubocop:enable Rails/SkipsModelValidations
end
end

View file

@ -387,4 +387,13 @@ describe Post, :type => :model do
expect(post.interacted_at).not_to be_blank
end
end
describe "#before_destroy" do
it "removes root_guid from reshares" do
post = FactoryGirl.create(:status_message, author: alice.person, public: true)
reshare = FactoryGirl.create(:reshare, author: bob.person, root: post)
post.destroy!
expect(reshare.reload.root_guid).to be_nil
end
end
end