2011-03-22 84 views
87

Rails已經引入了新的方法來驗證模型中的屬性。 當我使用驗證軌道3的自定義消息

validates :title, :presence => true 

它的工作原理,但是當我嘗試添加自定義消息

validates :title, :presence => true,:message => "Story title is required" 

產生一個錯誤

Unknown validator: 'message' 

回答

183

試試這個

validates :title, presence: { message: "Story title is required" } 
+18

如何去除:標題從上述錯誤信息?以上顯示爲「標題故事標題是必需的」。我想要「故事標題是必需的。」謝謝。 – Mayumi 2011-10-06 06:37:37

+5

這個答案中'=> true'去了哪裏?沒有必要嗎? – dukedave 2012-02-23 23:15:50

+2

@dukedave奇怪的是,這是沒有必要的。你可以將任何「真理」傳遞給「存在」。 – harm 2013-04-12 14:06:34

18

其實,我做到了以更好的方式。如果你想從你應該在你的_form.htmk.erb視圖使用此消息刪除字段標題:

正如你可以在這個視圖中看到:

<ul> 
    <% @article.errors.full_messages.each do |msg| %> 
    <li><%= msg %></li> 
    <% end %> 
</ul> 

通過將其更換

<ul> 
    <% @article.errors.each_with_index do |msg, i| %> 
    <li><%= msg[1] %></li> 
    <% end %> 
</ul> 
+0

Htmk?爲什麼,我從來沒有 – 2015-11-09 14:36:09

0

您可以使用rails 3的HUMANIZED_ATTRIBUTES。 例如,在上述情況下,它會像:

HUMANIZED_ATTRIBUTES = { 
:title => "story" 
} 
def self.human_attribute_name(attr, options={}) 
    HUMANIZED_ATTRIBUTES[attr.to_sym] || super 
end 

它會給你的錯誤信息,用故事替代模型屬性稱號。

1

爲用條件的布爾自定義消息可能是:

validates :foo, inclusion: { in: [true, false], message: "cannot be blank" }, if: :bar?