“电子邮件地址不能为空”使用用户名或电子邮件设计(“Email can't be blank

2019-09-20 07:06发布

我下面这个怎么样,就如何允许用户使用自己的用户名或邮箱地址登录并没有详细说明那里所有的步骤,但是当我试图通过注册registrations/new.html.erb形式我得到这个错误:

Email can't be blank

在我的模型,我有:

devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

attr_accessible :username, :email, :password, :password_confirmation, :remember_me

attr_accessor :login
attr_accessible :login

def self.find_first_by_auth_conditions(warden_conditions)
    conditions = warden_conditions.dup
    if login = conditions.delete(:login)
      where(conditions).where(["lower(username) = :value OR lower(email) = :value", { :value => login.downcase }]).first
    else
      where(conditions).first
    end
  end

这个问题有什么建议?

======= UPDATE

我发现这里的东西■[轨]如何利用设计和Rails,没有电子邮件这里是这样的:

  # Email is not required
  def email_required?
    false
  end

与在我的模型加入我可以创建用户名和离开电子邮件字段为空的记录,但是当我尝试没有电子邮件创建第二个记录的数据库上升的错误:

Mysql2::Error: Duplicate entry '' for key 'index_parents_on_email':...

我应该利用这一点,从数据库中我的表删除索引,只是验证username的模式? 因为我并不真的需要对模型中的电子邮件领域。

Answer 1:

更新

下面居然Asiniy的答案就像一个魅力(:

原件(谁知道?)

你的问题是MySQL表索引,你可能会从你的迁移中删除它,但我不知道,这将解决您的问题。 不使用在设计的电子邮件是棘手的,我建议像假的电子邮件解决方法出的username ,这样的事情

"#{user.username}@fake.me"

这不是很干净,但我看到的设计,当您使用omniauth做类似的东西的密码。

轨道4个强大的参数

我进入这个问题username在轨道4,我不得不在允许的参数配置如下的sign_up

class ApplicationController < ActionController::Base

  before_filter :configure_permitted_parameters, if: :devise_controller?

  protected

    def configure_permitted_parameters
      devise_parameter_sanitizer.for(:sign_up) do |u|
        u.permit :username, :email, :password, :password_confirmation
      end
    end
end

这在设计文件中描述



Answer 2:

普通解决方案

class User < AR::Base
  devise_for tralala

  def email_required?
    false
  end
end

请参阅https://github.com/plataformatec/devise/blob/master/lib/devise/models/validatable.rb#L29



文章来源: “Email can't be blank” Devise using username or email