error_messages_for and error_message_on

阅读更多

一般我们都要模型内使用validates_xxx_of 这样的确认信息。而这些信息是英文的,我们用三种方法来中文化它。


一、覆写:message:

validates_format_of :image_url,
:with => %r{.(gif|jpg|png)$}i,
:message => "必须是 GIF,JPG或PNG图片!!!"

使用这种方式时,我们就损失了一些通用信息的方便性。让我们看看第二种方式。

二、修改environment.rb文件:

在其中加入这些语句:

ActiveRecord::Errors.default_error_messages[:inclusion] = " 字段没有包括在列表内!"
ActiveRecord::Errors.default_error_messages[:exclusion] = " 字段已被保存过了!"
ActiveRecord::Errors.default_error_messages[:invalid] = " 字段是无效的!"
ActiveRecord::Errors.default_error_messages[:confirmation] = " 字段不匹配的信息!"
ActiveRecord::Errors.default_error_messages[:accepted] = " 字段必须接受此选项!"
ActiveRecord::Errors.default_error_messages[:empty] = " 字段不能为空!"
ActiveRecord::Errors.default_error_messages[:blank] = " 字段不能为空!"
ActiveRecord::Errors.default_error_messages[:too_long] = " 字段太长了(最大是 %d 个英文字符)!"
ActiveRecord::Errors.default_error_messages[:too_short] = " 字段太短了(最小是 %d 个英文字符)!"
ActiveRecord::Errors.default_error_messages[:wrong_length] = " 字段长度有错误(应该是 %d 个英文字符)!"
ActiveRecord::Errors.default_error_messages[:taken] = " 字段已经选择过了!"
ActiveRecord::Errors.default_error_messages[:not_a_number] = " 字段不是个数字!"

这样,你就获得了通用信息的方便性,即使你没有使用:message来覆写中文信息,你的view中显示的也是中文

但是我发现它有两个不便之处:一是修改时要重启WEBrick才能生效。二是在测试时会提示出错的。我用了第三种方式。

三、修改application_help.rb文件:

在该文件中加入下面语句:

ActiveRecord::Errors.default_error_messages = {
:inclusion => " 字段没有包括在列表内!" ,
:exclusion => " 字段已被保存过了!" ,
:invalid => " 字段是无效的!" ,
:confirmation => " 字段不匹配的信息!" ,
:accepted => " 字段必须接受此选项!" ,
:empty => " 字段不能为空!" ,
:blank => " 字段不能为空!" ,
:too_long => " 字段太长了(最大是 %d 个英文字符)!" ,
:too_short => " 字段太短了(最小是 %d 个英文字符)!" ,
:wrong_length => " 字段长度有错误(应该是 %d 个英文字符)!" ,
:taken => " 字段已经选择过了!" ,
:not_a_number => " 字段不是个数字!" ,
}

在Ruby On Rails里面,当你在对一些数据进行验证的时候,如果在视图里使用<%= error_messages_for “xxx” %><%= error_message_on “xxx”, “xxx” %> 方法输出错误信息的时候,ror会自动帮你加上

xxx
等这样的HTML标签,可是有时候我们并不想使用系统默认的标签处理,尤其是在WAP编程的时候,因为这些HTML标签WML根本就解析不了,所以我就希望不输出这些标签,只要得到干净的错误信息就行了,其实实现这种思路很简单,首先:
1:在application_helper.rb的全局转helper类里定义如下方法:
 
  def clear_error_message_on(object, method, prepend_text = “”, append_text = “”, css_class = “formError”)
    if errors = instance_variable_get(”@#{object}”).errors.on(method)
      “#{prepend_text}#{errors.is_a?(Array) ? errors.first : errors}#{append_text}”
    end
  end
 
2:然后在需要显示错误信息的视图里调用这个方法就行,如:
<%= clear_error_message_on “page”, “title” %>

你可能感兴趣的:(ActiveRecord,Rails,WAP,Ruby,编程)