98bb435f42
Migrations shouldn't fail RuboCop checks - especially lint checks, such as the nested method check. To avoid changing code in existing migrations, add the magic comment to the top of each of them to skip that file.
33 lines
870 B
Ruby
33 lines
870 B
Ruby
# rubocop:disable all
|
|
class RemoveDuplicatedNotificationSettings < ActiveRecord::Migration
|
|
def up
|
|
duplicates = exec_query(%Q{
|
|
SELECT user_id, source_type, source_id
|
|
FROM notification_settings
|
|
GROUP BY user_id, source_type, source_id
|
|
HAVING COUNT(*) > 1
|
|
})
|
|
|
|
duplicates.each do |row|
|
|
uid = row['user_id']
|
|
stype = connection.quote(row['source_type'])
|
|
sid = row['source_id']
|
|
|
|
execute(%Q{
|
|
DELETE FROM notification_settings
|
|
WHERE user_id = #{uid}
|
|
AND source_type = #{stype}
|
|
AND source_id = #{sid}
|
|
AND id != (
|
|
SELECT id FROM (
|
|
SELECT min(id) AS id
|
|
FROM notification_settings
|
|
WHERE user_id = #{uid}
|
|
AND source_type = #{stype}
|
|
AND source_id = #{sid}
|
|
) min_ids
|
|
)
|
|
})
|
|
end
|
|
end
|
|
end
|