У моєму додатку Rails (3.2) у моїй базі даних є маса таблиць, але я забув додати кілька ненульових обмежень. Я гуглився навколо, але не можу знайти, як записати міграцію, яка додає ненуле до існуючого стовпця.
ТІА.
У моєму додатку Rails (3.2) у моїй базі даних є маса таблиць, але я забув додати кілька ненульових обмежень. Я гуглився навколо, але не можу знайти, як записати міграцію, яка додає ненуле до існуючого стовпця.
ТІА.
Відповіді:
Для Rails 4+ відповідь натів (використовуючи change_column_null ) краще.
Попередньо Rails 4, спробуйте змінити стовпець .
IrreversibleMigration
який може бути не тим, що ви хочете.
Ви також можете використовувати change_column_null :
change_column_null :table_name, :column_name, false
1) ПЕРШИЙ: Додайте стовпчик із значенням за замовчуванням
2) ТАКОЖ: Видаліть значення за замовчуванням
add_column :orders, :items, :integer, null: false, default: 0
change_column :orders, :items, :integer, default: nil
Якщо ви використовуєте його для нового сценарію / схеми створення міграції, ось як ми можемо це визначити
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
:limit
обмеження), вам потрібно повторити ці атрибути при використанніchange_column
, інакше вони будуть втрачені. З цієї причини я вважаю за краще використовуватиchange_column_null