FIX: Join bookmarks migration on users to avoid missing user records

* the post_actions table has no FK to users, so if a user has been
  deleted we may end up with dangling post_action records, which then
  interferes with the bookmarks migration because bookmarks DO have
  an FK to users
This commit is contained in:
Martin Brennan 2020-05-19 16:31:05 +10:00
parent 062cb1e1cb
commit 779dc30d2e
2 changed files with 2 additions and 0 deletions

View File

@ -16,6 +16,7 @@ class CreateBookmarksFromPostActionBookmarks < ActiveRecord::Migration[6.0]
INNER JOIN posts ON posts.id = post_actions.post_id INNER JOIN posts ON posts.id = post_actions.post_id
LEFT JOIN bookmarks ON bookmarks.post_id = post_actions.post_id AND bookmarks.user_id = post_actions.user_id LEFT JOIN bookmarks ON bookmarks.post_id = post_actions.post_id AND bookmarks.user_id = post_actions.user_id
INNER JOIN topics ON topics.id = posts.topic_id INNER JOIN topics ON topics.id = posts.topic_id
INNER JOIN users ON users.id = post_actions.user_id
WHERE bookmarks.id IS NULL AND post_action_type_id = :type_id AND post_actions.deleted_at IS NULL AND posts.deleted_at IS NULL WHERE bookmarks.id IS NULL AND post_action_type_id = :type_id AND post_actions.deleted_at IS NULL AND posts.deleted_at IS NULL
LIMIT 2000 LIMIT 2000
SQL SQL

View File

@ -22,6 +22,7 @@ task "bookmarks:sync_to_table" => :environment do |_t, args|
INNER JOIN posts ON posts.id = post_actions.post_id INNER JOIN posts ON posts.id = post_actions.post_id
LEFT JOIN bookmarks ON bookmarks.post_id = post_actions.post_id AND bookmarks.user_id = post_actions.user_id LEFT JOIN bookmarks ON bookmarks.post_id = post_actions.post_id AND bookmarks.user_id = post_actions.user_id
INNER JOIN topics ON topics.id = posts.topic_id INNER JOIN topics ON topics.id = posts.topic_id
INNER JOIN users ON users.id = post_actions.user_id
WHERE bookmarks.id IS NULL AND post_action_type_id = :type_id AND post_actions.deleted_at IS NULL AND posts.deleted_at IS NULL WHERE bookmarks.id IS NULL AND post_action_type_id = :type_id AND post_actions.deleted_at IS NULL AND posts.deleted_at IS NULL
LIMIT 2000 LIMIT 2000
SQL SQL