Миграция Rails: удалить ограничение

#ruby-on-rails #database-migration

#ruby-on-rails #база данных-миграция

Вопрос:

У меня есть таблица в приложении Rails, которая (в schema.rb) выглядит как:

 create_table "users", :force => true do |t|
   t.string "name", :null=>false
   t.string "address", :null=>false
end
  

Я хотел бы написать миграцию rails, чтобы разрешить нули для поля адреса. т. е. после миграции таблица выглядит следующим образом:

 create_table "users", :force => true do |t|
   t.string "name", :null=>false
   t.string "address"
end
  

Что мне нужно сделать, чтобы удалить ограничение?

Ответ №1:

В Rails 4 для того, чтобы удалить ограничение not-null, вы можете использовать change_column_null :

 change_column_null :users, :address, true
  

Комментарии:

1. Вы действительно пробовали это? Если вы взглянете на исходный код функции, вы не увидите ничего, кроме: raise NotImplementedError, "change_column_null is not implemented"

2. я использовал его в postgresql. rails определяет его в адаптере для конкретной базы данных, см. postgres , mysql . можно искать другие в apidock . Итак, придется проверить адаптер базы данных на наличие поддержки, на случай, если кто-нибудь получит NotImplementedError

3. Голосуем за! Здесь также есть ссылка на руководства по Rails .

4. Это должен быть выбранный ответ

Ответ №2:

Не уверен, что вы можете вызвать t.address ? В любом случае… Я бы использовал change_column вот так

 change_column :users, :address, :string, :null => true
  

Документы…
http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/change_column