我有以下代码来显示错误消息:
<% if @profile.errors.any? %>
<% puts @profile.errors.full_messages.inspect.to_s %>
<ul>
<% @profile.errors.full_messages.each do |msg| %>
<% puts 'errors ared' + msg.to_s %>
<li><%= msg %></li>
<% end %>
</ul>
<% end %>
以下是模型中的验证:
validates :title, presence: true, length: {maximum: 50, minimum: 5, too_long: "Title cannot be longer than %{count} characters", too_short:" must be at least %{count} characters."}
出于某种原因,这会打印带有错误的属性名称和错误.例如,如果我试图通过更新名为“title”的表单字段来显示错误,则错误消息将显示为:
Title Title cannot be longer than 50 characters
我想在整个网站上显示许多错误消息,我不想自动编写任何内容.我如何在开头摆脱“标题”这个词?
最佳答案 full_messages方法将属性名称添加到验证错误消息中.
以下是rails中的方法实现
## Following code is extracted from Rails source code
def full_messages
map { |attribute, message| full_message(attribute, message) }
end
def full_message(attribute, message)
return message if attribute == :base
attr_name = attribute.to_s.tr('.', '_').humanize
attr_name = @base.class.human_attribute_name(attribute, default: attr_name)
I18n.t(:"errors.format", {
default: "%{attribute} %{message}",
attribute: attr_name,
message: message
})
end
如果你看到full_messages方法,它又调用full_messages,其中属性被添加到错误消息之前.
因此,如果您在验证错误消息中添加属性名称,它肯定会被复制,这就是您的情况.
简而言之,您不需要在验证消息中指定属性名称,因为rails已经在处理它.
编辑
没有什么是不可能的.如果您愿意,可以自定义如下
<% if @profile.errors.any? %>
<ul>
<% @profile.errors.messages.each do |attr, msg| %>
<% msg.each do |val| %>
<li><%= val %></li>
<% end %>
<% end %>
</ul>
<% end %>