Ответы:
Вот как вы должны это сделать:
change_column :users, :admin, :boolean, :default => false
Но некоторые базы данных, такие как PostgreSQL, не будут обновлять поле для ранее созданных строк, поэтому убедитесь, что вы обновляете поле также вручную при переносе.
change_column_default :employees, :foreign, false
from:
и to:
если вы хотите, чтобы он был обратимым :)
from
иto
было добавлено в Rails 5+ в этом коммите: github.com/rails/rails/pull/20018/files
Для Rails 4+ используйтеchange_column_default
def change
change_column_default :table, :column, value
end
def change
`add_column: foos,: name, default:" что-то для существующих значений "` `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
Бегать:
грабли дБ: мигрировать
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
блок пустым. Таблица не вернется к исходному состоянию, но миграцию можно откатить.