rails 3 的验证自定义消息
Posted
技术标签:
【中文标题】rails 3 的验证自定义消息【英文标题】:validation custom message for rails 3 【发布时间】:2011-07-20 04:43:31 【问题描述】:Rails 引入了新方法来验证模型内的属性。 当我使用
validates :title, :presence => true
它可以工作,但是当我尝试添加自定义消息时
validates :title, :presence => true,:message => "Story title is required"
产生错误
Unknown validator: 'message'
【问题讨论】:
【参考方案1】:试试这个
validates :title, presence: message: "Story title is required"
【讨论】:
如何从上面的错误消息中删除 :title ?上面显示为“需要标题故事标题”。我想要“需要故事标题”。谢谢。 这个答案中的=> true
去了哪里?没有必要吗?
@dukedave 奇怪的是没有必要。你可以将任何“真实”的东西传递给presence
。
@NotDan,链接已损坏。
@Mayumi - 您可以通过编写手动验证并将错误添加到:base
来从消息中删除属性名称,例如errors.add(:base, "Story title is required)
【参考方案2】:
带有条件的布尔值的自定义消息可能是:
validates :foo, inclusion: in: [true, false], message: "cannot be blank" , if: :bar?
【讨论】:
【参考方案3】:您可以使用 rails 3 的 HUMANIZED_ATTRIBUTES 。 例如在上面的情况下,它会像:
HUMANIZED_ATTRIBUTES =
:title => "story"
def self.human_attribute_name(attr, options=)
HUMANIZED_ATTRIBUTES[attr.to_sym] || super
end
它会给你错误信息,用故事替换模型属性标题。
【讨论】:
【参考方案4】:实际上,我以更好的方式做到了这一点。如果您想从消息中删除字段标题,您应该在 _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>
【讨论】:
以上是关于rails 3 的验证自定义消息的主要内容,如果未能解决你的问题,请参考以下文章
Ruby on Rails i18n - 想要在模型中翻译自定义消息
Rails 4.2 ActionController:BadRequest自定义错误消息