当前位置:  开发笔记 > 后端 > 正文

Ruby on Rails.自定义验证器方法中的自定义消息

如何解决《RubyonRails.自定义验证器方法中的自定义消息》经验,为你挑选了1个好方法。

我希望能够在模型验证器方法中设置自定义消息,以通知用户不正确的输入数据.

首先,我设置了一个自定义验证器类,我按照rails的文档中的建议重新定义了该validate_each方法:


# app/models/user.rb

# a custom validator class
class IsNotReservedValidator < ActiveModel::EachValidator
  RESERVED = [
    'admin',
    'superuser'
  ]

  def validate_each(record, attribute, value)
    if RESERVED.include? value
      record.errors[attribute] <<
        # options[:message] assigns a custom notification
        options[:message] || 'unfortunately, the name is reserved'
    end
  end
end

其次,我尝试validates通过两种不同的方式将自定义消息传递给方法:


# a user model
class User < ActiveRecord::Base
  include ActiveModel::Validations

  ERRORS = []

  begin
    validates :name,
      :is_not_reserved => true,
      # 1st try to set a custom message
      :options         => { :message => 'sorry, but the name is not valid' }
  rescue => e
    ERRORS << e
    begin
      validates :name,
        :is_not_reserved => true,
        # 2nd try to set a custom message
        :message         => 'sorry, but the name is not valid'
    rescue => e
      ERRORS << e
    end
  ensure
    puts ERRORS
  end
end

但这两种方法都不起作用:


>> user = User.new(:name => 'Shamaoke')
Unknown validator: 'options'
Unknown validator: 'message'

我在哪里以及如何为自定义验证器设置自定义消息?

谢谢.

Debian GNU/Linux 5.0.6;

Ruby 1.9.2;

Ruby on Rails 3.0.0.



1> Samuel..:

首先,不要include ActiveModel::Validations,它已经包含在内ActiveRecord::Base.其次,您没有使用:options密钥指定验证选项,而是使用验证器的密钥进行验证.

class User < ActiveRecord::Base
  validates :name,
           :is_not_reserved => { :message => 'sorry, but the name is not valid' }
end

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有