rails 3的验证自定义消息

时间:2011-03-22 04:25:14

标签: ruby-on-rails ruby ruby-on-rails-3 validation activerecord

Rails引入了验证模型内部属性的新方法。 当我使用

validates :title, :presence => true

它可以工作,但是当我尝试添加自定义消息时

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

生成错误

Unknown validator: 'message'

4 个答案:

答案 0 :(得分:192)

试试这个

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

答案 1 :(得分: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>

答案 2 :(得分:1)

带有条件的布尔值的自定义消息可能是:

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

答案 3 :(得分:0)

您可以使用rails的HUMANIZED_ATTRIBUTES 3。 例如,在上面的例子中,它将是:

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

它会给你错误信息,用故事替换模型属性标题。