10

Ho un modello di rotaie utilizzando graffetta che assomiglia a questo:Rails - Paperclip che convalida le dimensioni degli allegati quando non dovrebbe essere?

has_attached_file :image, :styles => { :normal => ['857x392#', :png] }, 
        :url => '/assets/pages/:id/:basename.:extension', 
        :path => ':rails_root/public/assets/pages/:id/:basename.:extension' 

    validates_attachment_size :image, :less_than => 2.megabytes 

Quando si tenta di creare un record di questo modello, senza un allegato da caricare, viene restituito l'errore di convalida:

ci sono stati problemi con i seguenti campi:

* Image file size file size must be between 0 and 2097152 bytes. 

che ho provato passando sia : allow_blank => true e: allow_nil => true dopo l'istruzione di convalida nel modello, ma nessuno dei due ha funzionato.

Come posso consentire che il parametro: image sia vuoto?

risposta

1

convalida del Paperclip controlla solo l'intervallo, e non si preoccupa della :allow_nil => true

Che cosa si può fare è cercare di impostare :min => nil o :min => -1, forse che funzionerà.

Aggiornamento: Questo non funzionerà nell'ultima versione di Paperclip poiché hanno cambiato il funzionamento delle convalide. Cosa si potrebbe provare invece è:

validates_attachment_size :image, :less_than => 2.megabytes, 
    :unless => Proc.new {|model| model.image } 
+0

Ho appena provato questo, non funziona. – ground5hark

+0

hmm, quale versione di paperclip usi (puoi trovare la versione in vendor/plugins/paperclip/lib/paperclip.rb)? –

+0

Ho appena provato a pensarlo qualche minuto fa. Sono tornato qui per segnalare i miei risultati e, purtroppo, sono quasi identici ai tuoi. Per chiunque altro con questo problema è possibile utilizzare anche l'hash: Proc.new {| model | modello [: Immagine] .nil? } – ground5hark

6
validates_attachment_size :image, :less_than => 25.megabytes, 
          :unless => Proc.new {|m| m[:image].nil?} 

funziona perfettamente per me

9

validates_attachment_size: immagine,: in => 0.megabytes..2.megabytes

funziona ora

0

Provare il seguente codice.

validate :image_present 

def image_present 
    if image.present? && image_file_size < 2.megabytes 
    errors.add(:file_size, "file size must be between 0 and 2 megabytes.") 
    end 
end 
Problemi correlati