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 自定义验证的错误信息的更多相关文章

  1. AngularJS 表单数据验证及错误信息提示

    一.表单验证基本原理 表单验证包括两个主题: 定义验证规则,验证数据有效性. 显示验证结果,把验证结果以友好的方式显示给用户. H5内置一些验证功能,并会显示内置的错误提示信息,先要禁用它,在< ...

  2. [oldboy-django][2深入django]form表单clean_xx, clean完成数据验证+ form错误信息

    form后台生成form里面的Input标签,以及设置Input的属性 # 需求 后台生成form里面的input标签,并设置input标签的属性, class RegisterForm(Form): ...

  3. egg框架实现表单验证及获取验证的错误信息

    最近再看egg框架 是阿里今年开源的一款基于nodejs的mvc架构的web框架 感兴趣的同学可以看看 因为之前一直做php的关系 在tp,yii,laravel这些框架中对于前台发送的数据,模型里都 ...

  4. Python自动化之ajax返回表单验证的错误信息和序列化扩展

    form内置序列化错误 如果使用form提交数据的时候,可以直接返回错误信息到模板里面进行渲染 但是如果使用ajax处理呢 from django import forms from django.f ...

  5. php 上传文件并对上传的文件进行简单验证(错误信息,格式(防伪装),大小,是否为http上传)

    <body> <?php /** *验证错误 *如果有错,就返回错误,如果没错,就返回null */ function check($file) { //1:验证是否有误 if($f ...

  6. spring-Formatter(格式化器)-validator(验证器)-错误信息定制

    项目结构

  7. MVC5 自定义表单错误信息

    1.

  8. Extjs 表单验证后,几种错误信息展示方式

    今天要求对form表单验证,进行系统学习一下,故做了几个示例: Ext.onReady(function(){        var panel=Ext.create('Ext.form.Panel' ...

  9. Django-Form表单(验证、定制、错误信息、Select)

      Django form 流程 1.创建类,继承form.Form 2.页面根据类的对象自动创建html标签 3.提交,request.POST       封装到类的对象里,obj=UserInf ...

随机推荐

  1. 润乾报表html代码填报

     由于html和富文本类型的单元格,不能进行可写操作,如果要想填报时填入html代码并且提交后更新就要换了一个方法,通过数据回填的方法. 比如在C3单元格设置html事件(也可以通过一个按钮来触发 ...

  2. 大数据量报表APPLET打印分页传输方案

     1 . 问题概述 当报表运算完成时,客户端经常需要调用润乾自带的runqianReport4Applet.jar来完成打印操作, 然而数据量比较大的时候,会导致无法加载完成,直至applet内存 ...

  3. VIM 乱码终极解决

    原文链接:http://blog.163.com/mageng11@126/blog/static/1408083742012128105645169/ 关于vim乱码,这篇文章讲的很详细,mark一 ...

  4. 【Java】【转】在命令行中编译和运行java

    原文:http://blog.csdn.net/u010900574/article/details/50792353 同时加载编译多个jar包和java文件 在个人平常使用或者当我们把代码部署到Li ...

  5. Linux 运维工程师一定要知道的六类好习惯和23个教训

    一.线上操作规范 1.测试使用当初学习Linux的使用,从基础到服务到集群,都是在虚拟机做的,虽然老师告诉我们跟真机没有什么差别,可是对真实环境的渴望日渐上升,不过虚拟机的各种快照却让我们养成了各种手 ...

  6. windows zend_guard+apache no ssl+php no Thread Safe fastcgi模式 环境配置

    最近公司要做代码加密,就采用ZEND GUARD 方式加密代码 并进行显示 此文为总结,以备自己以后查看和给需要的同学们参考 采用的php为5.3版本  由于现在加密的更改, 能支持zend guar ...

  7. GreenPlum 5.0的安装

    基本环境: server IP MDW 172.16.16.31 SDW1 172.16.16.34 SDW2 172.16.16.35 1:检查操作系统是否符合要求,以及系统设置. 我这里使用的系统 ...

  8. Oracle 客户端库时引发 BadImageFormatException

    程序提示错误: 试加载 Oracle 客户端库时引发 BadImageFormatException.如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题. 出现场 ...

  9. UITableView中cell里的UITextField不被弹出键盘挡住

    UITableView中cell里的UITextField不被弹出键盘挡住 本人视频教程系类   iOS中CALayer的使用 效果如下: 源码: EditCell.h 与 EditCell.m // ...

  10. SpringMVC框架项目在编译运行是常见错误

    1.问题描述(Spring_shizhan4ban_Chapter05应用):在自动注入FileValidator对象引用类型时报错,由于FileValidator是实体类,没有实现接口. @Auto ...