在Paperclip中更改错误验证消息

时间:2011-01-07 14:21:07

标签: ruby-on-rails validation ruby-on-rails-3 paperclip attachment

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

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

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

编辑:拼写错误

4 个答案:

答案 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行为包括验证错误之前的属性名称。您有几个选项可以解决此问题:

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

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

  3. 添加errors to base的自定义验证。这很简单,但是错误的,因为您建议在字段上存在验证错误。仍然可以解决你的问题。

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

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

答案 3 :(得分:0)

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

validates_attachment_presence :image, :message => 'xxxx'

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