2010-04-16 92 views
2

我有一个网站,它有两种口味,英文和法文。下面是一些代码Rails覆盖验证器消息

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" 

请有人建议一种达到预期结果的方法。

回答

6

从在的ActiveRecord :: Error类generate_full_methods的Rails文档...

包装了一个错误信息到 FULL_MESSAGE格式。

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

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

因为由 验证所使用的消息密钥可在 validates_被覆盖*类宏观层面 一个可以定制用于任何特定验证FULL_MESSAGE 格式:

#应用程序/模型/ article.rb类文章<的ActiveRecord :: Base的

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

配置/区域设置/ en.yml EN:

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

这对我很有帮助。谢谢 – 2011-01-11 11:16:50

0

您可以使用此宝石:advanced_errors

指定不包括字段名,如果第一个字符是“^”自定义错误消息。因此,您将会收到如下消息:

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

它们将正常显示。