在Paperclip中更改错误validation消息

在回形针中设置validation消息时,例如

validates_attachment_presence, :image, :message => 'xxxx' 

自定义消息自动以字段名称为前缀,即使它已被:message消息覆盖。 你如何完全覆盖消息并使其完全自定义?

编辑:错字

不是一个真正的解决方案,但简单的解决方案是跳过回形针validation并编写自定义解决方案。

 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 

我希望它可以提供帮助

你真的想在你的视图中而不是你的模型中做到这一点,而且它实际上非常直接。 我们只是要遍历错误,当你的附件出现错误时,我们将忽略字段名称:

 
    <% @myObject.errors.keys.each do |field| %> <% @myObject.errors[field].each do |msg| %> <% if field == :image_file_name %>
  • <%= msg %>
  • <% else %>
  • <%= field.to_s + " " + msg %>
  • <% end %> <% end %> <% end %>

使用模型名称替换@myObject ,该名称应仅显示设置为附件validation错误的消息。 这只是一个简单的例子,它与其他内容一起显示它们,但当然你可以用消息做任何你喜欢的事情。 保留具有错误的字段的名称非常重要,以防您想要编写特定于其故障的任何逻辑,而不必依赖于永远保持完全相同的错误消息。

它的标准Rails行为包括validation错误之前的属性名称。 您有几个选项可以解决此问题:

  1. 将您的错误消息设置为OK以使属性名称前置:)

  2. 使用其他错误消息格式化程序。 编写自己的帮助程序来迭代@ object.errors并将消息包装在HTML标记中非常容易。 我更喜欢在字段附近使用内联错误消息,因此我们总是跳过属性名称。

  3. 自定义validation,将错误添加到base 。 这很简单,但是错误的,因为您建议在字段上存在validation错误。 还是可以解决你的问题。

  4. 覆盖该属性的humanized_attribute_name以隐藏它。 humanized_attribute_name可能在其他地方使用,因此这可能会导致其他问题。

 HumanizedAttributesOverride = { :image => "" } def self.human_attribute_name(attr) HumanizedAttributesOverride[attr.to_sym] || super end 

我不知道你的问题中是否只是一个错字,但应该是:

 validates_attachment_presence :image, :message => 'xxxx' 

我不会使用:message来添加自定义错误消息,但将其放在locales文件中。