How can I rename a database column in a Ruby on Rails migration

De openkb
Aller à : Navigation, rechercher

Sommaire

Questions

I wrongly named a column hased_password instead of hashed_password.

How do I update the database schema, using migration to rename this column?

Answers

rename_column :table, :old_column, :new_column
  Update:   

You ll probably want to create a separate migration to do this. (Rename FixColumnName as you will)

script/generate migration FixColumnName
# creates  db/migrate/xxxxxxxxxx_fix_column_name.rb

Then edit the migration to do your will.

# db/migrate/xxxxxxxxxx_fix_column_name.rb
class FixColumnName < ActiveRecord::Migration
  def self.up
    rename_column :table_name, :old_column, :new_column
  end

  def self.down
    # rename back if you need or do something else or do nothing
  end
end

  An update for Rails 3.1   

http://guides.rubyonrails.org/migrations.html http://guides.rubyonrails.org/migrations.html

rails g migration FixColumnName

class FixColumnName < ActiveRecord::Migration
  def change
    rename_column :table_name, :old_column, :new_column
  end
end

If you happen to have a whole bunch of columns to rename, or something that would have required repeating the table name over and over again.

rename_column :table_name, :old_column1, :new_column1
rename_column :table_name, :old_column2, :new_column2
...

You could use change_table to keep things a little neater.

class FixColumnNames < ActiveRecord::Migration
  def change
    change_table :table_name do |t|
      t.rename :old_column1, :new_column1
      t.rename :old_column2, :new_column2
      ...
    end
  end
end
 Thank you, Luke && Turadg, for bringing up the topic.  

Then just db:migrate as usual or however you go about your business.


  An update for Rails 4   

While creating a Migration as for renaming a column, Rails 4 generates a change method instead of up and down as mentioned in the above answer. The generated change method is as below :

$ > rails g migration ChangeColumnName

which will create a migration file similar to this :

class ChangeColumnName < ActiveRecord::Migration
  def change
    rename_column :table_name, :old_column, :new_column
  end
end

Source

License : cc by-sa 3.0

http://stackoverflow.com/questions/1992019/how-can-i-rename-a-database-column-in-a-ruby-on-rails-migration

Related

Outils personnels
Espaces de noms

Variantes
Actions
Navigation
Outils