【问题标题】:How do I display different error messages for different validation errors?如何针对不同的验证错误显示不同的错误消息?
【发布时间】:2015-03-07 19:51:44
【问题描述】:

我有一个用于获取用户手机号码的字段,并且由于没有人希望在特定字段中包含不需要的内容,因此我添加了验证。 这是我的验证代码

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

  validates :user_name, uniqueness: true
  validates :mobile,
                  length: {minimum: 10, maximum: 10, :message => "Just those 10 digits, thanks for the extra"},
                  :numericality => {:only_integer => true, :message => "So your number has alphabets in it?"}
end

我添加的验证是长度和数字,现在当我输入一个小于或大于 10 的数字时,它会显示第一个错误,但是当我添加一些字母时,它仍然会显示长度错误。

我还检查了,即使我在移动字段中输入 10 位数字,我仍然会显示长度错误。也许我添加的验证也存在一些问题。

【问题讨论】:

    标签: ruby-on-rails validation error-handling


    【解决方案1】:

    请澄清什么是确切的问题? 您的验证是正确的。
    考虑我的代码:

    class Comment < ActiveRecord::Base
        include ActsAsCommentable::Comment
        belongs_to :commentable, :polymorphic => true
        validates :title,
                        length: {minimum: 10, maximum: 10, :message => "Just those 10 digits, thanks for the extra"},
                        :numericality => {:only_integer => true, :message => "So your number has alphabets in it?"}
    end
    

    并在控制台输出:

    comment = Comment.new
    comment.title = "Long text content"
    comment.valid? # false
    comment.errors 
    # {
    #     :title => [
    #         [0] "Just those 10 digits, thanks for the extra",
    #         [1] "So your number has alphabets in it?"
    #     ]
    # }
    

    两条错误消息都存在。

    【讨论】:

    • 问题是当我输入超过十个字符时,它显示长度错误,当我在其中输入字母时,它显示相同的错误(长度)而不是数值错误
    • 我的例子能如你所愿吗?所以,你的意思是,如果你输入字母符号并且超过 10 个它会显示长度错误但不显示数字错误?你怎么试?也许在您更改模型中的代码后,您不reload! 或调用valid? 或使用相同的对象等?请发布一些代码示例,说明您得到的和想要得到的。
    • 不,它没有。首先我添加了一长串数字,它显示了字符串错误,然后我尝试了 9 个数字和一个字母,然后它也显示了长度错误。此外,当我尝试正确的输入时,十位数字也显示相同的错误。
    • 每次更改移动属性后,在检查错误哈希之前,您是否在对象上调用valid??没有它,您将看不到任何重新验证
    • 不,我不这么认为。你能告诉我如何在创建用户时调用它的示例代码吗?
    猜你喜欢
    • 1970-01-01
    • 2012-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-07
    • 1970-01-01
    • 2015-02-27
    • 2023-03-18
    相关资源
    最近更新 更多