1

画像にはペーパークリップを使用しています。画像ファイル (jpeg/png) のみがアップロードされるようにしたい。これが私のペーパークリップ検証ルールです。

validates_attachment :photo, :presence => { :message => "is required" }, :content_type => { :content_type => ['image/jpeg', 'image/jpg', 'image/png'], :message => "Invalid content type" }

ユーザーが画像以外のファイルをアップロードした場合、検証は機能し、レコードは保存されません。ただし、エラー メッセージは @news.errors.messages[: photo ] ではなく @news.errors.messages[: photo_content_type ] に保存れます

エラーメッセージを表示するために client-side-validations gem を使用しています。: photo_content_typeに無効なコンテンツ タイプ メッセージが添付されているため、インラインで表示されません。

現在、次のようにメッセージを表示しています。

<% if @news.errors.messages[:photo_content_type] %>
    <div class="field_with_errors">
        <%= f.file_field :photo %>
        <label for="" class="validation-error-message">
            <%= @news.errors.messages[:photo_content_type][0] %>
        </label>
    </div>
<% else %>
    <%= f.file_field :photo %>
<% end %>

ユーザーが画像以外のファイルをアップロードすると、メッセージが @news.errors.messages[:photo] に追加されるようにするためのより良い方法はありますか


検証コールバックの後に追加した更新:

after_validation :join_img_errors

def join_img_errors
  if errors.messages.has_key?(:photo_content_type)
    errors.messages[:photo] = errors.messages[:photo_content_type]
  end
end

この方法では、ビュー コードを変更する必要はありません。しかし、ペーパークリップを使用するすべてのモデルにコールバックを追加する必要があります。

4

0 に答える 0