设计:不需要电子邮件

sta*_*ord 16 ruby-on-rails devise

我不想要使用设备登录电子邮件.我从config/initializers/devise.rb中删除了电子邮件:

config.authentication_keys = [ :login ]
Run Code Online (Sandbox Code Playgroud)

并将此添加到我的用户模型:

def email_required?
  false
end
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试保存用户时,我收到此错误:

SQLite3::SQLException: users.email may not be NULL
Run Code Online (Sandbox Code Playgroud)

我想改变迁移中的某些内容吗?

Mau*_*aes 31

一些引用说你不应该删除:validatable,因为它会删除密码验证.

就我而言,我email从数据库中的用户中删除了该列,并且设计开始崩溃.我补充说:

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

def email_changed?
  false
end
Run Code Online (Sandbox Code Playgroud)

它运作正常.

  • http://rubydoc.info/github/plataformatec/devise/master/Devise/Models/Validatable (5认同)

Vel*_*Les 17

看起来您将数据库中设置的电子邮件字段设置为"not NULL"或"Allow Null"为false.并且您直接从数据库收到错误.假设您的用户模型被称为用户,您需要添加以下迁移来修复:

change_column :users, :email, :string, :null => true 
Run Code Online (Sandbox Code Playgroud)

文档:http: //apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/change_column


小智 9

除了从"电子邮件"列中删除"required"之外,您还需要从用户模型中删除":validatable".