【问题标题】:Rails override validator messageRails 覆盖验证器消息
【发布时间】:2010-04-16 10:30:26
【问题描述】:

我有一个提供 2 种口味(英语和法语)的网站。这是一些代码

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"

请有人建议一种实现预期结果的方法。

【问题讨论】:

    标签: ruby-on-rails validation message


    【解决方案1】:

    来自 ActiveRecord::Error 类中 generate_full_methods 的 Rails 文档...

    将错误消息包装到 full_message 格式。

    默认的 full_message 格式 任何语言环境都是“{{attribute}} {{message}}”。可以指定 特定于语言环境的默认 full_message 通过将其存储为翻译来格式化 为钥匙 :"activerecord.errors.full_messages.format"。

    另外可以指定一个 验证特定的错误消息 通过存储翻译来格式化 :“activerecord.errors.full_messages.[message_key]”。 例如。任何的 full_message 格式 使用 :blank 作为验证 消息密钥(例如 validates_presence_of) 可以存储 到 :"activerecord.errors.full_messages.blank"。

    因为a使用的消息密钥 验证可以被覆盖 validates_* 类宏级别 可以自定义 full_message 任何特定验证的格式:

    # app/models/article.rb 类文章<:base>
    validates_presence_of :title, :message => :"title.blank"   end   #  
    

    config/locales/en.yml en:

    activerecord:
      errors:
        full_messages:
          title:
            blank: This title is screwed!
    

    【讨论】:

      【解决方案2】:

      你可以使用这个 gem:advanced_errors

      如果第一个字符是“^”,则指定不包含字段名称的自定义错误消息。所以,你会收到类似的消息

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

      它们会正常显示。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-09-06
        • 2018-01-31
        • 1970-01-01
        • 2020-01-17
        • 2018-01-28
        • 1970-01-01
        • 2014-08-01
        • 2014-04-04
        相关资源
        最近更新 更多