Ruby on Rails: как добавить ненулевое ограничение к существующему столбцу с помощью миграции? - PullRequest
122 голосов
/ 15 февраля 2012

В моем приложении Rails (3.2) в моей базе данных есть несколько таблиц, но я забыл добавить несколько ненулевых ограничений.Я погуглил, но не могу найти, как написать миграцию, которая добавляет ненулевое значение к существующему столбцу.

TIA.

Ответы [ 4 ]

254 голосов
/ 28 ноября 2013

Вы также можете использовать change_column_null :

change_column_null :table_name, :column_name, false
91 голосов
/ 15 февраля 2012

Для Rails 4+ лучше использовать ответ Нейтса (используя change_column_null ).

Pre-Rails 4, попробуйте change_column .

9 голосов
/ 06 мая 2016

1) FIRST: добавить столбец со значением по умолчанию

2) THEN: удалить значение по умолчанию

add_column :orders, :items, :integer, null: false, default: 0
change_column :orders, :items, :integer, default: nil
1 голос
/ 30 июля 2018

Если вы используете его в новом скрипте / схеме создания миграции, вот как мы можем его определить

class CreateUsers < ActiveRecord::Migration[5.2]
  def change
    create_table :users do |t|
    t.string :name, null: false     # Notice here, NOT NULL definition
    t.string :email, null: false
    t.string :password, null: false
    t.integer :created_by
    t.integer :updated_by 

    t.datetime :created_at
    t.datetime :updated_at, default: -> { 'CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP' }
   end
  end
end
...