Devise: не требуется электронная почта

Я бы хотел, чтобы не требовалось электронное письмо для входа в систему с помощью devise. Я удалил адрес электронной почты из config/initializers/devise.rb:

config.authentication_keys = [ :login ]

и добавил это в мою модель пользователя:

def email_required?
  false
end

Тем не менее, я получаю эту ошибку, когда пытаюсь сохранить пользователя:

SQLite3::SQLException: users.email may not be NULL

Можно ли что-то изменить в миграции?

Ответы

Ответ 1

Похоже, у вас есть поле электронной почты, установленное в базе данных, как "not NULL" или "Allow Null" в false. И вы получаете ошибку непосредственно из базы данных. Предполагая, что ваша пользовательская модель называется пользователем, вам нужно добавить следующую миграцию, чтобы исправить это:

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

Документация: http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/change_column

Ответ 2

Некоторые ссылки говорят, что вы не должны удалять :validatable, потому что это удалит проверки пароля.

В моем случае, я удалил столбец email из моих пользователей в базе данных, и устройство начало сбой. Я добавил это:

# app/models/user.rb
def email_required?
  false
end

def email_changed?
  false
end

и это сработало правильно.

Ответ 3

Дополнительно для удаления столбца "required" from: email вам нужно удалить ": validatable" из пользовательской модели.