回答:
これを行う方法は次のとおりです。
change_column :users, :admin, :boolean, :default => false
ただし、PostgreSQLなどの一部のデータベースでは、以前に作成された行のフィールドが更新されないため、移行時にもフィールドを手動で更新してください。
change_column_default :employees, :foreign, false
from:
し、to:
あなたはそれが可逆:)にしたい場合
以下のためのRails 4+、使用change_column_default
def change
change_column_default :table, :column, value
end
def change
`add_column:foos、:name、default:" something for existing values "` `change_column_default:foos、:name、default:" "`end
change_column_default :products, :approved, from: true, to: false
。ただし、機能しません。
使用def change
するということは、リバーシブルなマイグレーションを書く必要があるということです。そしてchange_column
、可逆的ではありません。は元に戻すことはできますが、元に戻すことはできませんchange_column
。
代わりに、2、3行余分になることがありますが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
実行:
rake db:migrate
Key is not present in table error
ます。
これはあなたができることです:
class Profile < ActiveRecord::Base
before_save :set_default_val
def set_default_val
self.send_updates = 'val' unless self.send_updates
end
end
編集:...しかし、これは新人の間違いです!
before_save
up
ブロックではなくchange
ブロックに配置します。down
ブロックを空のままにすることができます。テーブルは元の状態には戻りませんが、移行をロールバックできます。