设为首页 加入收藏

TOP

Rails 自定义验证的错误信息
2019-09-03 03:38:15 】 浏览:37
Tags:Rails 定义 验证 错误 信息

 

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  #=> [ "手机号 不能为空", "手机号 已占用"]

参考:

处理验证错误

Active Record 模型的翻译

 


Rails 自定义验证的错误信息 https://www.cppentry.com/bencandy.php?fid=87&id=249419

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇pymysql模块常用操作 下一篇如何替换某文件中的所有的特定字..