Как добавить значение по умолчанию в столбец, который уже существует при миграции?
Вся документация, которую я могу найти, показывает вам, как это сделать, если столбец еще не существует, но в этом случае он это делает.
Как добавить значение по умолчанию в столбец, который уже существует при миграции?
Вся документация, которую я могу найти, показывает вам, как это сделать, если столбец еще не существует, но в этом случае он это делает.
Вот как это сделать:
change_column :users, :admin, :boolean, :default => false
Но некоторые базы данных, такие как PostgreSQL, не будут обновлять поле для ранее созданных строк, поэтому убедитесь, что вы также обновили поле manaully при миграции.
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
Execute:
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
Run:
rake db: migrate
Это то, что вы можете сделать:
class Profile < ActiveRecord::Base
before_save :set_default_val
def set_default_val
self.send_updates = 'val' unless self.send_updates
end
end