Module: Calib::Devise::SoftDeletionMigrationEnhancable
- Includes:
- SoftDeletion::MigrationEnhancable
- Defined in:
- lib/calib/devise/soft_deletion_migration_enhancable.rb
Overview
A Module for migration with soft deletation
-
unique email to ununique
-
email and filter_column to composite unique
-
add colunn caneled_at_column for storing canceled datetime
usage
create migration file
class ChangeForSoftDeletationToUsers < ActiveRecord::Migration[5.1]
include Calib::Devise::SoftDeletionMigrationEnhancable
def change
change_for_device_soft_deletion(:users)
end
end
do migration
and results on schema.rb:
# with coulumn for soft_deleted_flag
t.integer "alive", default: 1
# unique indexes
# [for postgresql] - partial indexes -
t.index ["email", "alive"], name: "index_users_on_email_and_alive", unique: true, where: "(alive = 1)"
# [for mysql] - ignoring null column -
t.index ["email", "alive"], name: "index_users_on_email_and_alive", unique: true
Instance Method Summary collapse
Methods included from SoftDeletion::MigrationEnhancable
#add_column_for_soft_deletion, #add_unique_column_for_soft_deletion, #add_unique_index_for_soft_deletion
Instance Method Details
#change_for_device_soft_deletion(scope, filter_column = :alive, canceled_at_column = :canceled_at) ⇒ Object
31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/calib/devise/soft_deletion_migration_enhancable.rb', line 31 def change_for_device_soft_deletion(scope, filter_column = :alive, canceled_at_column = :canceled_at) reversible do |dir| dir.up { remove_index scope, :email } dir.down { add_index scope, :email, unique: true } end add_column scope, canceled_at_column, :datetime add_column_for_soft_deletion(scope, filter_column) add_unique_index_for_soft_deletion(scope, :email, filter_column) end |