2016-04-02 11 views
2

In meiner rails 4 app verwende ich carrierwave um Bilder hochzuladen.Carrierwave - Presence-Validierung wird ausgelöst, wenn der Dateityp nicht auf der Whitelist steht

class UserItemImage < ActiveRecord::Base 

    include PicturesHelper 

    attr_accessor :foo 

    mount_uploader :picture, PictureUploader 
    belongs_to :user_item 
    validate :picture_size 
    validates :picture, presence: true 

end 

Ich bin mit dieser Whitelist in meiner picture_uploader.rb

def extension_white_list 
    %w(jpg jpeg png) 
    end 

Meine Form

<%= simple_form_for :user_item_image, url: user_item_user_item_images_path(@user_item), multipart: true do |f| %> 
    <%= f.input :picture, as: :file, label: false, input_html: {multiple: true, class: 'image-file'} %> 

Wenn ich versuche, eine Datei mit der Erweiterung nicht auf der weißen Liste zu befestigen. Ich bekomme eine Fehlermeldung "Kann nicht leer sein". Wenn ich die Anwesenheitsvalidierung entferne, wird der Validierungsfehler white_list korrekt angezeigt. Ich möchte wirklich die Dateierweiterung Fehlermeldung stattdessen angezeigt werden, weil technisch nicht leer ist, es hat nur eine falsche Datei.

+0

Haben Sie das Problem gelöst? Ich habe das gleiche Problem! – gnclmorais

+1

@gnclmorais Ich denke, ich habe gerade dies verwendet, um Dateieingabe http://plugins.krajee.com/file-input zu handhaben – user4584963

Antwort

0

Ich habe das gleiche Problem und endete dies zu tun:

1) Stellen Sie sicher, mount_uploader :attachment, AttachmentUploader vor Validierungen zu setzen.

2)

validates :attachment, presence: true, unless: :attachment_errors_exist? 

def attachment_errors_exist? 
    errors[:attachment].present? 
end 

Ich dachte, wenn andere Fehler vorhanden sind (wahrscheinlich es ist extension_white_list_error), dann muss die Anlage bereits vorhanden sein, nicht wahr? Ich denke, Sie können die Nachricht selbst weiter untersuchen, um festzustellen, ob es extension_white_list_error ist, aber das ist gut genug für mich.