Method: ActiveRecord::Migration::CommandRecorder#inverse_of
- Defined in:
- activerecord/lib/active_record/migration/command_recorder.rb
#inverse_of(command, args, &block) ⇒ Object
Returns the inverse of the given command. For example:
recorder.inverse_of(:rename_table, [:old, :new])
# => [:rename_table, [:new, :old]]
If the inverse of a command requires several commands, returns array of commands.
recorder.inverse_of(:remove_columns, [:some_table, :foo, :bar, type: :string])
# => [[:add_column, :some_table, :foo, :string], [:add_column, :some_table, :bar, :string]]
This method will raise an IrreversibleMigration exception if it cannot invert the command.
114 115 116 117 118 119 120 121 122 123 |
# File 'activerecord/lib/active_record/migration/command_recorder.rb', line 114 def inverse_of(command, args, &block) method = :"invert_#{command}" raise IrreversibleMigration, <<~MSG unless respond_to?(method, true) This migration uses #{command}, which is not automatically reversible. To make the migration reversible you can either: 1. Define #up and #down methods in place of the #change method. 2. Use the #reversible method to define reversible behavior. MSG send(method, args, &block) end |