マイグレーションによって既に存在している列にデフォルト値を追加する方法を教えてください。
私が見つけることができるすべての文書は、列がまだ存在していない場合にそれを行う方法を示していますが、この場合それは存在します。
これを行う方法は次のとおりです。
change_column :users, :admin, :boolean, :default => false
しかし、PostgreSQLのようなデータベースの中には、以前に作成された行のフィールドを更新しないものがあるので、移行時にもフィールドを手動で更新するようにしてください。
change_column_default :employees, :foreign, false
Rails 4 +には、 change_column_default
を使用してください。
def change
change_column_default :table, :column, value
end
def change
を使用すると、元に戻すことができる移行を記述する必要があります。そしてchange_column
は元に戻せません。 change_column
は元に戻すことができないため、上がることはできますが下がることはできません。
代わりに、余分な行になるかもしれませんが、def up
とdef down
を使うべきです。
したがって、デフォルト値のない列がある場合は、デフォルト値を追加するためにこれを実行する必要があります。
def up
change_column :users, :admin, :boolean, default: false
end
def down
change_column :users, :admin, :boolean, default: nil
end
あるいは、既存の列のデフォルト値を変更したい場合.
def up
change_column :users, :admin, :boolean, default: false
end
def down
change_column :users, :admin, :boolean, default: true
end
Rails 4では、デフォルト値でテーブルに列を追加するマイグレーションを生成することはできません。次の手順では、デフォルト値trueまたはfalseで既存のテーブルに新しい列を追加します。
$ Rails generate migration add_columnname_to_tablename columnname:boolean
上記のコマンドはあなたのテーブルに新しい列を追加します。
class AddColumnnameToTablename < ActiveRecord::Migration
def change
add_column :table_name, :column_name, :boolean, default: false
end
end
$ rake db:migrate
実行します。
Rails generate migration add_column_to_table column:boolean
それはこの移行を生成します:
class AddColumnToTable < ActiveRecord::Migration
def change
add_column :table, :column, :boolean
end
end
追加してデフォルト値を設定します。default => 1
add_column:table、:column、:boolean、:default => 1
実行します。
レーキdb:migrate