16

Paperclip のアップロード検証で検証メッセージが 2 回表示されるのを防ぐ方法はありますか?

これが私のモデルです:

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 %>

無効なファイルをアップロードすると、次のエラー メッセージが表示されます。

  • 写真のコンテンツ タイプが無効です
  • 写真が無効です

これらのうちの1つだけを表示させる方法はありますか? モデルに message: を追加してみました。しかし、これも2回出てきます!

ありがとうございました!

4

3 に答える 3

15

私の意見では、以下はより良い解決策です

class YourModel < ActiveRecord::Base
  ...

  after_validation :clean_paperclip_errors

  def clean_paperclip_errors
    errors.delete(:photo)
  end
end

@rubiety のコメントはこちら

于 2014-11-06T08:26:06.540 に答える
3

プレゼンスの検証が不要になるまで、以前の回答のソリューションがうまく機能することに注意してください。これは、 @model.errors.delete(:photo) が重複と存在検証エラーを削除するためです。以下のコードは、retain_specified_errors メソッドの引数として指定された属性の検証エラーを保持します。

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
于 2015-07-10T15:52:43.623 に答える