Ruby on Rails 4 – 重复的回形针validation消息

有没有办法阻止validation消息出现两次Paperclip上传validation?

这是我的模型:

has_attached_file :photo, :styles => { :thumb => "215x165" }, :default_url => "/images/:style/missing.png" validates_attachment :photo, :presence => true, :content_type => { :content_type => "image/jpg" }, :size => { :in => 0..0.5.megabytes } 

这是我的观点:

  

The following errors were found:

  • -

如果我上传无效文件,我会收到以下错误消息:

  • 照片内容类型无效
  • 照片无效

有没有办法让其中一个出现? 我尝试过向模型添加消息: 但是,这也只是出现了两次!

谢谢!

如果检查@ model.errors哈希,可以看到它返回:photo属性的数组,以及每个回形针validation器的消息。

 {:photo_content_type=>["is invalid"], :photo=>["is invalid", "must be less than 1048576 Bytes"], :photo_file_size=>["must be less than 1048576 Bytes"] } 

您需要使用一些Ruby过滤掉其中的一部分。 有很多方法可以解决它(请参阅此处了解一些想法),但快速修复可能是删除:photo array并仅使用paperclip生成的属性中的消息。

 @model.errors.delete(:photo) 

这应该给你留下像这样的@model.errors.full_messages

 ["Photo content type is invalid", "Photo file size must be less than 1048576 Bytes"] 

在我看来,下面是一个更好的解决方案

 class YourModel < ActiveRecord::Base ... after_validation :clean_paperclip_errors def clean_paperclip_errors errors.delete(:photo) end end 

请参阅@rubiety的评论

请注意,以前的答案中的解决方案很有效,直到您不需要在线validation。 这是因为@ model.errors.delete(:photo)将删除重复项以及您的状态validation错误。 下面的代码保留了为retain_specified_errors方法指定的参数的属性的validation错误。

 class YourModel < ActiveRecord::Base ... after_validation { retain_specified_errors(%i(attr another_att)) } def retain_specified_errors(attrs_to_retain) errors.each do |attr| unless attrs_to_retain.include?(attr) errors.delete(attr) end end end end