sto usando graffetta in un app rotaie e hanno le seguenti tre validazioni nel mio modelloSmarter convalide graffetta
validates_attachment_presence :photo
validates_attachment_size :photo, :less_than=>1.megabyte
validates_attachment_content_type :photo, :content_type=>['image/jpeg', 'image/png', 'image/gif']
Se l'utente dimentica di aggiungere un allegato, tutte e tre le convalide falliscono e, quindi, l'utente è presentato con le seguenti tre errori:
# Photo file name must be set.
# Photo file size file size must be between 0 and 1048576 bytes.
# Photo content type is not included in the list
penso che sarebbe meglio per mostrare solo il primo errore in questo caso dal momento che gli altri due errori sono puramente consequenziale ... io preferirei che l'utente sempre e solo vedere il secondi due errori se è stato aggiunto un allegato ma non soddisfa i criteri di convalida.
Sono certo che non esiste una convalida pre-cotta che fa questo genere di cose e dalla lettura del codice in vendor/plugins/paperclip/lib/paperclip.rb vedo che il metodo validates_attachment_size supporta: a meno parametro come mostrato:
def validates_attachment_presence name, options = {}
message = options[:message] || "must be set."
validates_presence_of :"#{name}_file_name",
:message => message,
:if => options[:if],
:unless => options[:unless]
end
Così, ho pensato che avrei potuto fare qualcosa di simile al seguente:
validates_attachment_size :photo, :less_than=>1.megabyte, :unless=> :photo.blank
Ma che rompe l'applicazione. Qualcuno ha qualche esperienza nel fare questo genere di cose? Sarebbe un bel contributo al codice sorgente di paperclip.
EDIT:
Ho provato con questo:
validates_attachment_size :photo, :less_than=>1.megabyte,
:unless=> Proc.new { |image| image[:photo].nil? }
Lo fa non proprio lavoro anche se, come ho appena riuscito a caricare un mp3 5 MB con questa convalida in atto. Ma è promettente visto che il messaggio di errore non appare quando l'utente non ha allegato una foto.
Quale versione di graffetta stai usando? Ho 2.3.1.1 e quello che stai descrivendo avviene automaticamente per me. Se nessun file è allegato, restituisce solo quell'errore. Se allego un file, ma le convalide per tipo di dimensione e contenuto non riescono, vengono visualizzati quegli errori. –
strano perché sono su 2.3.1.1 del plug-in anche ... ho intenzione di andare con il suggerimento qui sotto sulla creazione di miei messaggi di errore personalizzati comunque perché non mi piace il modo in cui ti dicono che il bisogno ha bisogno essere tra 0 e X byte .... – stephenmurdoch
Sto usando 2.3.2 con lo stesso problema –