2011-03-22 81 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?