在回形针中设置验证消息时,例如
validates_attachment_presence, :image, :message => 'xxxx'
自定义消息自动以字段名称为前缀,即使它已被:message覆盖。你如何完全覆盖消息并使其完全自定义?
编辑:拼写错误
答案 0 :(得分:7)
不是真正的解决方案,但简单的解决方案是跳过回形针验证并编写自定义验证。
validate :check_content_type
def check_content_type
if !['image/jpeg', 'image/gif','image/png'].include?(self.image_content_type)
errors.add_to_base("Image '#{self.image_file_name}' is not a valid image type") # or errors.add
end
end
我希望它可以提供帮助
答案 1 :(得分:3)
你真的想在你的视图中而不是你的模型中做到这一点,而且它实际上非常直接。我们只是要解决错误,当你的附件出现错误时,我们会忽略字段名称:
<ul>
<% @myObject.errors.keys.each do |field| %>
<% @myObject.errors[field].each do |msg| %>
<% if field == :image_file_name %>
<li><%= msg %></li>
<% else %>
<li><%= field.to_s + " " + msg %></li>
<% end %>
<% end %>
<% end %>
</ul>
用您的模型名称替换@myObject
,该名称应仅显示设置为附件验证错误的消息。这只是一个简单的例子,它与其他内容一起显示它们,但当然你可以用消息做任何你喜欢的事情。保留具有错误的字段的名称非常重要,以防您想要编写特定于其故障的任何逻辑,而不必依赖于永远保持完全相同的错误消息。
答案 2 :(得分:1)
要显示的标准Rails行为包括验证错误之前的属性名称。您有几个选项可以解决此问题:
将您的错误消息设置为OK以使属性名称前置:)
使用其他错误消息格式化程序。编写自己的帮助程序来迭代@ object.errors并在HTML标记中包装消息非常容易。我更喜欢在字段附近使用内联错误消息,因此我们总是跳过属性名称。
添加errors to base的自定义验证。这很简单,但是错误的,因为您建议在字段上存在验证错误。仍然可以解决你的问题。
覆盖该属性的humanized_attribute_name以隐藏它。 humanized_attribute_name可能在其他地方使用,因此可能会导致其他问题。
HumanizedAttributesOverride = {
:image => ""
}
def self.human_attribute_name(attr)
HumanizedAttributesOverride[attr.to_sym] || super
end
答案 3 :(得分:0)
我不知道你的问题中是否只是一个拼写错误,但它应该是:
validates_attachment_presence :image, :message => 'xxxx'
我不会使用:message来添加自定义错误消息,但将其放在locales文件中。