2010-04-16 90 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" 

它們將正常顯示。