ruby on rails - Add a default value to a column through a migration

ID : 10374

viewed : 20

Tags : ruby-on-railsrubymigrationruby-on-railsruby

Top 5 Answer for ruby on rails - Add a default value to a column through a migration

vote vote

96

Here's how you should do it:

change_column :users, :admin, :boolean, :default => false 

But some databases, like PostgreSQL, will not update the field for rows previously created, so make sure you update the field manaully on the migration too.

vote vote

89

change_column_default :employees, :foreign, false 
vote vote

80

For Rails 4+, use change_column_default

def change   change_column_default :table, :column, value end 
vote vote

69

Using def change means you should write migrations that are reversible. And change_column is not reversible. You can go up but you cannot go down, since change_column is irreversible.

Instead, though it may be a couple extra lines, you should use def up and def down

So if you have a column with no default value, then you should do this to add a default value.

def up   change_column :users, :admin, :boolean, default: false end  def down   change_column :users, :admin, :boolean, default: nil end 

Or if you want to change the default value for an existing column.

def up   change_column :users, :admin, :boolean, default: false end  def down   change_column :users, :admin, :boolean, default: true end 
vote vote

58

**Rails 4.X +**

As of Rails 4 you can't generate a migration to add a column to a table with a default value, The following steps add a new column to an existing table with default value true or false.

1. Run the migration from command line to add the new column

$ rails generate migration add_columnname_to_tablename columnname:boolean 

The above command will add a new column in your table.

2. Set the new column value to TRUE/FALSE by editing the new migration file created.

class AddColumnnameToTablename < ActiveRecord::Migration   def change     add_column :table_name, :column_name, :boolean, default: false   end end 

**3. To make the changes into your application database table, run the following command in terminal**

$ rake db:migrate 

Top 3 video Explaining ruby on rails - Add a default value to a column through a migration

Related QUESTION?