2014-02-20 32 views
1

我很清楚有些問題會問這個問題,但我不允許對其中的任何問題發表評論,無論如何,我的問題與這些問題有點不同。我試圖從驗證中獲取自定義錯誤消息,其中自定義錯誤消息不必以要驗證的屬性開始。Rails 4中的自定義驗證消息

我的屬性名爲「form_person」,表示填寫表單的人的姓名(我正在處理的網站的法定要求)。所以,我有

validates_presence_of :form_person, message: "^We need to know who is filling in this form (your name)" 

這用來工作,如「^」會導致被添加到errors[:base]的消息,但現在不是了,我得到「型的人^我們需要知道誰是填補在這個形式(你的名字)「中,這是...好...不是有用的。我已經看到了類似2年前的一個解決方案,這個解決方案涉及本地化文件的混亂,但這實際上是我或其他員工可能尋找驗證信息的整個世界的最後一個地方,我們根本沒有本地化。我知道我可以寫一個自定義的驗證器方法,這可能是我必須做的,但我不喜歡這樣做,因爲它很混亂,並且不必要地使用無關的方法污染了模型名稱空間。已經有了validates_presence_of方法!我查看了包括邊緣在內的各種導軌指南,除了通過自定義驗證器或(呃)自定義驗證類別以外,沒有提及任何方法。只要檢查一個屬性的存在幾乎看起來不是一個合適的東西來編寫一個完整的單獨的驗證器類,那麼我怎麼能在一個簡潔的線條中方便地做到這一點,就像我曾經能夠做到的那樣?

+1

是否使用'custom_error_message'寶石? Github頁面說它支持'rails 3'和'ruby 1.9'。沒有提到'rails 4' – usha

+0

是的,這正是發生了什麼事(請參閱我對下面答案的評論,以及Emu的回答)。鑑於它沒有提到對Rails 4的支持,而且這不是我覺得足夠需要寶石的東西,我只是爲此寫了一個自定義驗證器。沒有什麼大不了的,我只喜歡custom_error_message語法,但還不足以使custom_error_message Rails 4與我自己兼容。 – max

回答

5

試試這個:

validates :form_person, :presence => {message: "^We need to know who is filling in this form (your name)"} 
+1

同樣的結果:(。我使用的語法和你的語法*用於*工作,我幾乎可以發誓,在Rails 3. – max

+0

它不工作? – Emu

+1

另一種方式顯示爲http://stackoverflow.com/questions/ 808547 /完全自定義驗證錯誤消息與導軌 – Emu