代码之家  ›  专栏  ›  技术社区  ›  Anand Shah

Rails重写验证程序消息

  •  2
  • Anand Shah  · 技术社区  · 16 年前

    我有一个网站有两种口味,英语和法语。这是一些密码

    app/views/user/register.html.erb
    -----------------          
    <% form_for .....>
      <%= f.text_field :first_name %> 
    <% end %>
    
    app/models/user.rb
    ------------------
    class User < ActiveRecord::Base
      validates_presence_of :first_name
    
    end 
    

    现在要显示错误消息,以防该站点以法语版本提供服务,我已经

    app/config/locales/fr.yml
    -------------------------
      activerecord:
        errors:
          messages:
            empty: "ne peut pas être vide"
    

    因此,如果有人没有填写名字,那么验证器将获取字段的名称,并为空子句附加自定义消息

    "First name ne peut pas être vide"
    

    这是不正确的,因为法语中的“名字”是“pr_)nom”,因此应该是

    "Prénom ne peut pas être vide"
    

    有人能提出一种达到预期结果的方法吗?

    2 回复  |  直到 11 年前
        1
  •  6
  •   Rob Di Marco    16 年前

    从Rails文档中获取ActiveRecord::Error类中生成\u完整\u方法…

    将错误消息包装到 完整的消息格式。

    默认的完整消息格式 任何区域设置都是“属性” {{Meal}}。可以指定 特定于区域设置的默认完整消息 通过将其存储为翻译进行格式化 为了钥匙 :“activeRecord.errors.full_messages.format”。

    此外,还可以指定 验证特定错误消息 通过存储翻译来格式化 :“ActiveRecord.errors.full_messages.[message_key]”。 例如,任何 验证使用:空白作为 消息键(例如 验证是否可以存储 到 :“activeRecord.errors.full_messages.blank”。

    因为消息密钥由 可以在上覆盖验证 验证类宏级别 您可以自定义完整的\u消息 任何特定验证的格式:

    #app/models/article.rb类文章<activeRecord::base

    validates_presence_of :title, :message => :"title.blank"   end   #  
    

    配置/locales/en.yml en:

    activerecord:
      errors:
        full_messages:
          title:
            blank: This title is screwed!
    
        2
  •  0
  •   Eric G    11 年前

    你可以使用这个宝石: advanced_errors

    若第一个字符为'^',则指定不包含字段名的自定义错误消息。所以,你会收到这样的信息

    "^Prénom ne peut pas être vide"
    

    它们会正常显示。

    推荐文章