Добавьте значение по умолчанию в столбец через миграцию

Как добавить значение по умолчанию в столбец, который уже существует при миграции?

Вся документация, которую я могу найти, показывает вам, как это сделать, если столбец еще не существует, но в этом случае он это делает.

Ответ 1

Вот как это сделать:

change_column :users, :admin, :boolean, :default => false

Но некоторые базы данных, такие как PostgreSQL, не будут обновлять поле для ранее созданных строк, поэтому убедитесь, что вы также обновили поле manaully при миграции.

Ответ 2

change_column_default :employees, :foreign, false

Ответ 3

Для Rails 4+ используйте change_column_default

def change
  change_column_default :table, :column, value
end

Ответ 4

Использование 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

Ответ 5

** Рельсы 4.X + **

Начиная с Rails 4, вы не можете сгенерировать миграцию для добавления столбца в таблицу со значением по умолчанию . Следующие шаги добавляют новый столбец в существующую таблицу со значением по умолчанию true или false.

1. Запустите миграцию из командной строки, чтобы добавить новый столбец.

$ rails generate migration add_columnname_to_tablename columnname:boolean

Приведенная выше команда добавит новый столбец в вашу таблицу.

2. Установите для нового значения столбца значение ИСТИНА/ЛОЖЬ, отредактировав новый созданный файл миграции.

class AddColumnnameToTablename < ActiveRecord::Migration
  def change
    add_column :table_name, :column_name, :boolean, default: false
  end
end

** 3. Чтобы внести изменения в таблицу базы данных приложения, выполните следующую команду в терминале **

$ rake db:migrate

Ответ 6

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

Ответ 7

Это то, что вы можете сделать:

class Profile < ActiveRecord::Base
  before_save :set_default_val

  def set_default_val
    self.send_updates = 'val' unless self.send_updates
  end
end