ruby-on-railsmigrationrails-activerecord

How do you write a migration to rename an ActiveRecord model and its table in Rails?


I'm terrible at naming and realize that there are a better set of names for my models in my Rails app.
Is there any way to use a migration to rename a model and its corresponding table?


Solution

  • Here's an example:

    class RenameOldTableToNewTable < ActiveRecord::Migration
      def self.up
        rename_table :old_table_name, :new_table_name
      end
    
      def self.down
        rename_table :new_table_name, :old_table_name
      end
    end
    

    I had to go and rename the model declaration file manually.

    Edit:

    In Rails 3.1 & 4, ActiveRecord::Migration::CommandRecorder knows how to reverse rename_table migrations, so you can do this:

    class RenameOldTableToNewTable < ActiveRecord::Migration
      def change
        rename_table :old_table_name, :new_table_name
      end 
    end
    

    (You still have to go through and manually rename your files.)