“验证错误:密码不能为空”但表单中没有密码字段

Posted

技术标签:

【中文标题】“验证错误:密码不能为空”但表单中没有密码字段【英文标题】:"Validation Error: Password can't be blank" but no password field in form 【发布时间】:2016-11-15 00:47:38 【问题描述】:

我有一个表格可以将信息保存到我网站的数据库中。即使表单不需要登录,每当我尝试提交表单时,我都会收到错误消息“验证失败:密码不能为空”。我不确定为什么会发生这种情况,因为表单中没有密码字段。这是控制器的代码,错误来自保存行:

def create
    @newinstructor = Instructor.new
    @newinstructor_app = InstructorApp.where(first_name: params['instructor']['first_name']).where(last_name: params['instructor']['last_name'])
    @newinstructor.first_name = params['instructor']['first_name']
    @newinstructor.last_name = params['instructor']['last_name']
    @newinstructor.story = params['instructor']['story']
    @newinstructor.save!

这是instructor.rb:

 class Instructor < ActiveRecord::Base
      has_many :activities

      devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable
      has_many :activities
      has_one :instructor_app
    end

【问题讨论】:

仅供参考,如果您使用代码编辑原始帖子会更容易阅读 【参考方案1】:

您应该能够通过以下任一方法进行修复:

从您的Instructor 中删除:validatable 选项,设计选项现在应该是:

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

将以下方法添加到您的Instructor

def password_required?
 false
end

如果有帮助请告诉我

【讨论】:

【参考方案2】:

您的讲师模型中似乎有像 :database_authenticatable 这样的设计模块。您看不到它,但 Devise 预计默认情况下会有一个密码字段。如果您的讲师表格没有登录,那么一种选择是简单地删除设计模块。如果你有一个,Devise 通常用于 User 模型,用于在用户最初注册和/或登录时进行身份验证

【讨论】:

以上是关于“验证错误:密码不能为空”但表单中没有密码字段的主要内容,如果未能解决你的问题,请参考以下文章

使用密码字段验证多个表单

即使没有表单字段,Laravel 也会显示验证错误?

如果表单未通过验证,密码字段是不是应保留其值?

gmail卡服务中的密码类型字段

PHP表单没有正确验证表单字段

带密码确认的引导 4 验证并禁用提交,直到表单验证(注册表单)