2011-08-22 9 views
9

ファイル(ビデオおよび画像)のアップロードにクリップを使用しています。 ビデオと画像の両方に同じ添付ファイル(ソース)を使用しました。クリップのビデオ/画像の添付ファイルを使用する

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 

異なるエラーメッセージを表示する場合があります。

  1. アップロードするファイルがイメージタイプであるが、jpg/png/jpeg/gifではない場合。
  2. アップロードされたファイルは、ビデオの種類ではなく、MP4

である私は、これをどのように達成することができますか? ご協力いただけると助かります。

答えて

22

最後に私は解決策を得ました。 同じ2つの条件付き検証を追加しました

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

素晴らしいソリューションです。 btw。レコードごとに1つの添付ファイルを保持しますが、この場合はクラス名をmediumと呼んではいけません。 – res

関連する問題