Ruby on rails Rails 4和Desive:在呈现表单时立即显示验证错误

Ruby on rails Rails 4和Desive:在呈现表单时立即显示验证错误,ruby-on-rails,ruby,validation,devise,Ruby On Rails,Ruby,Validation,Devise,我目前正在尝试实现我的第一个非平凡的Rails应用程序,在尝试实现Desive时遇到了一些问题。最初,我使用的是HartlRails教程中描述的手动认证方法。在退出(或者我相信是这样)所有的手写代码后,我添加了Desive gem,以及一些自定义字段,所有这些字段都可以在封面下正常工作,这意味着我可以注册、登录和以其他方式使用该应用程序 然而,我现在遇到的问题是,我错过了验证中的一个技巧,因为一旦我导航到“用户注册”视图,表单就会呈现完整的大而难看的红色错误消息,如下所示: Email can'

我目前正在尝试实现我的第一个非平凡的Rails应用程序,在尝试实现Desive时遇到了一些问题。最初,我使用的是HartlRails教程中描述的手动认证方法。在退出(或者我相信是这样)所有的手写代码后,我添加了Desive gem,以及一些自定义字段,所有这些字段都可以在封面下正常工作,这意味着我可以注册、登录和以其他方式使用该应用程序

然而,我现在遇到的问题是,我错过了验证中的一个技巧,因为一旦我导航到“用户注册”视图,表单就会呈现完整的大而难看的红色错误消息,如下所示:

Email can't be blank
Password can't be blank
First name can't be blank
Last name can't be blank
请记住,这些错误消息是在渲染时立即生成的,甚至在用户有机会输入数据之前

我可以通过在
user.rb
中注释验证来消除名字和姓氏错误。如果我去掉Desive Validable模块,我可以防止出现电子邮件和密码错误

下面是user.rb:

class User < ActiveRecord::Base
    # Include default devise modules. Others available are:
    # :confirmable, :lockable, :timeoutable and :omniauthable
    devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

    belongs_to :entry
    has_many :categories
    has_many :rates
    has_many :entries

    # If I comment out the next four lines regarding validation, error messages disappear

    validates :first_name, presence: true
    validates :first_name, uniqueness: true, if: -> { self.first_name.present? }

    validates :last_name, presence: true
    validates :last_name, uniqueness: true, if: -> { self.last_name.present? }

    def full_name
        fullname = "#{last_name}, #{first_name}"
    end

end
class用户{self.first_name.present?}
验证:姓氏,状态:true
验证:last_name,唯一性:true,if:->{self.last_name.present?}
def全名
全名=“#{last_name},#{first_name}”
结束
结束

在用户实际提交数据之前,我如何避免显示这些错误消息?在提交数据时,我如何验证每个字段(因为我当前的非解决方案只是为了完全避免验证)?提前谢谢。

一些坏消息和一些好消息。坏消息是,我在这个问题上把头发扯了下来,现在已经半秃头了。好消息是有一个简单的解决方案

问题与用户模型或验证无关。问题是我链接到注册机制的方式

我有一个带有注册、注册和注销链接的索引页。问题是我构建注册链接的方式

错:

<%= link_to "Register", user_registration_path, :method => :post %>
我陷入了这个陷阱,因为我相信我已经放弃了在采用Desive之前实现的所有原始身份验证代码,这对于模型、控制器和路由是正确的,但对于视图则不正确


因此,现在我必须在Hair Underflow上发布关于如何让头发更快生长的信息,但与此同时,我松了一口气。

您是否在没有手动定义验证的情况下进行了测试?Desive提供了自己的验证,我会首先测试:)通过逐个执行这两件事来测试,一旦从这个模型中删除
:validable
,第二次删除自己的验证,但保留工作
:validable
,正如我在原始帖子中提到的(我知道,它很长):如果我在我的自定义字段上注释掉验证(姓、名),错误消息不会显示,但我没有得到验证。如果我删除了:validable模块,我唯一的保护就是email字段是f.email_字段,并且允许使用空白密码。您可以理解为什么这是不可接受的。@Rich Peck:出于好奇,我创建了一个带有custom first_name和last_name字段,使用自定义视图(config.scoped views=true)其中包括那些自定义字段,我没有收到任何错误消息。显然,情况有所不同,但应用程序_controller.rb是相同的,工作版本上的用户模型只包含designe模块信息。也许我会删减原始副本中的user.rb,看看会发生什么。Hmmmmm.designe有一个脾气暴躁的习惯阿曼蒂尔!如果你尝试其他任何东西,请告诉我们:)我也遇到了这个问题。谢谢。顺便说一句,你的头发长了吗?哈哈。是的,但我现在是平头,所以抓不住头发,再也拔不出头发了D
<%= link_to "Register", new_user_registration_path, :method => :get %>