欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Rails 自定义验证的错误信息

程序员文章站 2022-06-17 09:36:57
Active Record 验证辅助方法的默认错误消息都是英文,为了提高用户体验,有时候我们经常会被要求按特定的文本展示错误信息。此时有两种实现方式。 1. 直接在:message添加文案 验证一下: 2. 使用 rails国际化API 在config/locales文件下已经存在一个默认的en.y ......

 

Active Record 验证辅助方法的默认错误消息都是英文,为了提高用户体验,有时候我们经常会被要求按特定的文本展示错误信息。此时有两种实现方式。

1. 直接在:message添加文案

class User < ActiveRecord::Base
 validates :email,
presence: { message: '邮箱不能为空!' },
uniqueness: { message: '邮箱 %{value} 已存在!' }
validates :name,
presence: { message: '姓名不能为空!' },
length: { maximum: 255, too_long: '姓名最多为255个字符' }
end

验证一下:

user = User.new
user.valid?
user.errors.messages
#=> { :email=>["邮箱不能为空!"], :name=>["姓名不能为空!"]} 

2. 使用 rails国际化API

在config/locales文件下已经存在一个默认的en.yml文件,我们可以再添加一个 zh-CN.yml 文件作为中文的翻译

class ApplicationController < ActionController::Base
  before_action :set_locale
  def set_locale
     I18n.locale = user_locale
    # after store current locale
    cookies[:locale] = params[:locale] if params[:locale]
  rescue I18n::InvalidLocale
    I18n.locale = I18n.default_locale
  end

  protected
  def user_locale
    params[:locale] || cookies[:locale] || http_head_locale || I18n.default_locale
  end
  def http_head_locale
request.env['HTTP_ACCEPT_LANGUAGE']
end
end

设置每个key对应的翻译值

zh-CN:
  activerecord:
    attributes:
      taken: '已占用'
      blank: '不能为空'
      user:
        email: '邮箱'
        password: '密码'
        name: '姓名'
        mobile: '手机号'
    models:
      user: '用户'
    errors:
      messages:
        record_invalid: "%{errors}"
        taken: '已占用'
        blank: '不能为空'
      attributes:
        version: '版本'
  actions:
    create: '新增'
    update: '修改'
    destroy: '删除'

验证一下:

class User < ActiveRecord::Base
  validates :mobile,
            presence:   true,
            uniqueness: true,
end
user = User.new
user.valid?
user.errors.messages  #=> { :mobile=>["不能为空", "已占用"] } 
user.errors.full_messages  #=> [ "手机号 不能为空", "手机号 已占用"]