diff options
author | Yves Senn <yves.senn@gmail.com> | 2015-09-04 11:18:20 +0200 |
---|---|---|
committer | Yves Senn <yves.senn@gmail.com> | 2015-09-04 12:04:21 +0200 |
commit | 451b954c2f072d08e13fc2552f3dfa35d93b0935 (patch) | |
tree | 49fc5dff04be0a34dfcb8771211b10cbf2b7cc15 /activerecord/lib/active_record/migration.rb | |
parent | 01598e955574a8bb4d85fccbfa40adf28f7dd3c0 (diff) | |
parent | 4ca27c25f60950977e18881e26b76588ebc370f9 (diff) | |
download | rails-451b954c2f072d08e13fc2552f3dfa35d93b0935.tar.gz rails-451b954c2f072d08e13fc2552f3dfa35d93b0935.tar.bz2 rails-451b954c2f072d08e13fc2552f3dfa35d93b0935.zip |
Merge pull request #21412 from yui-knk/feature/irreversible_migration_error_msg
Add detailed error message to `IrreversibleMigration`
Diffstat (limited to 'activerecord/lib/active_record/migration.rb')
-rw-r--r-- | activerecord/lib/active_record/migration.rb | 72 |
1 files changed, 71 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/migration.rb b/activerecord/lib/active_record/migration.rb index b4dd8eff5a..112d52024f 100644 --- a/activerecord/lib/active_record/migration.rb +++ b/activerecord/lib/active_record/migration.rb @@ -9,7 +9,77 @@ module ActiveRecord end end - # Exception that can be raised to stop migrations from going backwards. + # Exception that can be raised to stop migrations from being rolled back. + # For example the following migration is not reversible. + # Rolling back this migration will raise an ActiveRecord::IrreversibleMigration error. + # + # class IrreversibleMigrationExample < ActiveRecord::Migration + # def change + # create_table :distributors do |t| + # t.string :zipcode + # end + # + # execute <<-SQL + # ALTER TABLE distributors + # ADD CONSTRAINT zipchk + # CHECK (char_length(zipcode) = 5) NO INHERIT; + # SQL + # end + # end + # + # There are two ways to mitigate this problem. + # + # 1. Define <tt>#up</tt> and <tt>#down</tt> methods instead of <tt>#change</tt>: + # + # class ReversibleMigrationExample < ActiveRecord::Migration + # def up + # create_table :distributors do |t| + # t.string :zipcode + # end + # + # execute <<-SQL + # ALTER TABLE distributors + # ADD CONSTRAINT zipchk + # CHECK (char_length(zipcode) = 5) NO INHERIT; + # SQL + # end + # + # def down + # execute <<-SQL + # ALTER TABLE distributors + # DROP CONSTRAINT zipchk + # SQL + # + # drop_table :distributors + # end + # end + # + # 2. Use the #reversible method in <tt>#change</tt> method: + # + # class ReversibleMigrationExample < ActiveRecord::Migration + # def change + # create_table :distributors do |t| + # t.string :zipcode + # end + # + # reversible do |dir| + # dir.up do + # execute <<-SQL + # ALTER TABLE distributors + # ADD CONSTRAINT zipchk + # CHECK (char_length(zipcode) = 5) NO INHERIT; + # SQL + # end + # + # dir.down do + # execute <<-SQL + # ALTER TABLE distributors + # DROP CONSTRAINT zipchk + # SQL + # end + # end + # end + # end class IrreversibleMigration < MigrationError end |