2011-08-22 16 views
9

Sto usando graffetta per caricare file (video e immagini). Hanno utilizzato lo stesso allegato (origine) per video e immagini.Usa singolo allegato per video/immagine in graffetta

class Media < ActiveRecord::Base 
    belongs_to :memory 
    validates_attachment_presence :source 
    validates_attachment_content_type :source, 
    :content_type => ['video/mp4', 'image/png', 'image/jpeg', 'image/jpg', 'image/gif'] 
end 

Ora volevo visualizzare diversi messaggi di errore in diversi casi.

  1. Quando si carica il file è il tipo di immagine, ma non il jpg/png/jpeg/gif. file di
  2. Quando caricato è di tipo video, ma non il mp4

Come posso raggiungere questo obiettivo? Qualsiasi aiuto sarebbe molto apprezzato.

risposta

22

Così finalmente ho trovato la soluzione. Ho aggiunto 2 convalida condizionale per lo stesso

class Media < ActiveRecord::Base 
    belongs_to :memory 
    validates_attachment_presence :source 
    validates_attachment_content_type :source, 
    :content_type => ['video/mp4'], 
    :message => "Sorry, right now we only support MP4 video", 
    :if => :is_type_of_video? 
    validates_attachment_content_type :source, 
    :content_type => ['image/png', 'image/jpeg', 'image/jpg', 'image/gif'], 
    :message => "Different error message", 
    :if => :is_type_of_image? 
    has_attached_file :source 

    protected 
    def is_type_of_video? 
    source.content_type =~ %r(video) 
    end 

    def is_type_of_image? 
    source.content_type =~ %r(image) 
    end 
end 
+0

bella soluzione. btw. mantieni un allegato per record, in questo caso il nome della classe non dovrebbe essere chiamato medium? – res

Problemi correlati