Rails覆盖验证消息

时间:2010-04-16 10:30:27

标签: ruby-on-rails validation message

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

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 个答案:

答案 0 :(得分:6)

来自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格式   使用的验证:空白作为   消息密钥(例如   validates_presence_of)可以存储   至   : “activerecord.errors.full_messages.blank”

     

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

     

#app / models / article.rb class Article&lt;的ActiveRecord :: Base的

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

config / locales / en.yml en:

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

答案 1 :(得分:0)

您可以使用此gem:advanced_errors

指定第一个字符为“^”时不包含字段名称的自定义错误消息。所以,你会有像

这样的消息
"^Prénom ne peut pas être vide"

他们会正常显示。