Ruby on Rails 4 - 重复的回形针验证消息

时间:2013-11-12 15:46:06

标签: ruby-on-rails ruby-on-rails-4 paperclip

有没有办法阻止验证邮件出现两次Paperclip上传验证?

这是我的模特:

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 }

以下是我的观点:

<% if @product.errors.any? %>
<p>The following errors were found:</p>
  <ul>
    <% @product.errors.full_messages.each do |message| %>
      <li>- <%= message %></li>
    <% end %>
  </ul>
<% end %>

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

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

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

谢谢!

3 个答案:

答案 0 :(得分:23)

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

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

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

@model.errors.delete(:photo)

这应该为您留下@model.errors.full_messages这样的内容:

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

答案 1 :(得分:13)

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

class YourModel < ActiveRecord::Base
  ...

  after_validation :clean_paperclip_errors

  def clean_paperclip_errors
    errors.delete(:photo)
  end
end

请参阅@rubiety here

的评论

答案 2 :(得分:2)

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

library(splitstackshape)
cSplit(fitted.values.plot,"miRNAs",sep="|")