Недавно я создал миграцию рельсов, чтобы добавить имя пользователя в мое приложение.Что действительно делает «null: false»?
add_column :users, :username, :string
Я создал тестовую учетную запись и зарегистрировался без ввода имени пользователя. Регистрация прошла и создала пользователя без имени пользователя. Я должен был исправить это, так как мне нужно имя пользователя, чтобы установить URL-адрес профиля. Так что я обновил свою миграцию:
add_column :users, :username, :string, null: false
Я думал, что это будет препятствовать пользователю создать учетную запись с пустым именем - не работает! Я все еще собирался зарегистрироваться без имени пользователя.
В конце концов, добавив ...
validates_presence_of :username
... к моей user.rb модели исправили проблему. Но почему не null: false остановить его? Почему я должен хранить его и как он работает?
, так что не должен ли он получить сбой базы данных при вставке строки, где username = null? –
Вы не можете просто обновить уже примененный файл миграции и ожидать, что DB будет синхронизироваться. Вам нужно отменить миграцию и снова применить или создать новую, которая изменяет ограничение. Просто проверьте схему базы данных, если '' NOT NULL' присутствует в 'username'. См. Здесь: http://guides.rubyonrails.org/active_record_migrations.html#changing-existing-migrations – gertas