To add a default value to a column in a Rails migration, you can use the
change_column_default method. This method takes three arguments: the name of the table, the name of the column, and the default value you want to set. For example, to add a default value of
false to a
published column in a
posts table, you could use the following migration:
👋 Check out our easy to use desktop GUI for SQL
Beekeeper Studio is a truly cross-platform SQL GUI with a clean, uncluttered interface. Write SQL, edit data, alter tables, and more!
Available for MacOS, Linux, and Windows.
class AddDefaultToPosts < ActiveRecord::Migration[6.0] def change change_column_default :posts, :published, from: nil, to: false end end
change_column_default method has a number of options that you can use to customize its behavior. For example, you can use the
from: option to specify the current default value of the column, if any. This is useful if you are changing the default value of a column that already has a default value set. The
to: option specifies the new default value that you want to set.
In addition to the
change_column_default method, you can also use the
add_column method to add a new column to a table and set a default value at the same time. The
add_column method takes three arguments: the name of the table, the name of the column, and a hash of options for the column. To specify a default value, you can use the
:default option. For example, to add a new
published column to a
posts table with a default value of
false, you could use the following migration:
class AddPublishedToPosts < ActiveRecord::Migration[6.0] def change add_column :posts, :published, :boolean, default: false end end
It’s important to note that default values are not applied retroactively to existing rows in the table. If you add a default value to a column that already has data in it, the default value will only be applied to new rows that are inserted into the table after the migration is run. If you want to update the existing rows in the table with the new default value, you can use the
update_all method in a separate migration. For example:
class UpdatePublishedToPosts < ActiveRecord::Migration[6.0] def change Post.where(published: nil).update_all(published: false) end end
In this example, we are using the
update_all method to set the
published column to
false for all rows where the
published column is currently
Overall, Rails migrations are a powerful and convenient way to make changes to the structure of a database. By using the
add_column methods, you can easily add default values to columns in your database tables.