Відповіді:
Ось як слід це зробити:
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, за замовчуванням:" щось для існуючих значень "` `change_column_default: foos,: name, default:" "`end
change_column_default :products, :approved, from: true, to: false
- але це також не працює.
Використовуючи 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
Виконати:
rake db: мігрувати
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
EDIT: ... але, мабуть, це новачок помилка!
before_save
up
блок, а не вchange
блок. Ви можете залишитиdown
блок порожнім. Він не поверне таблицю до початкового стану, але міграцію можна повернути назад.