得益於豐富的派克的答案,我能解決我的問題與此解決方案。
首先使用拉姆達的處理條件
has_attached_file :file,
styles: lambda { |a| a.instance.check_file_type}
然後我在這個方法中,我做了驗證定義check_file_type
命名的自定義方法,並在此基礎上ruby best pratice article
def check_file_type
if is_image_type?
{:small => "x200>", :medium => "x300>", :large => "x400>"}
elsif is_video_type?
{
:thumb => { :geometry => "100x100#", :format => 'jpg', :time => 10, :processors => [:ffmpeg] },
:medium => {:geometry => "250x150#", :format => 'jpg', :time => 10, :processors => [:ffmpeg]}
}
else
{}
end
end
輕鬆檢查
並定義我的is_image_type?
和is_video_type?
以處理視頻和ima水電站。
def is_image_type?
file_content_type =~ %r(image)
end
def is_video_type?
file_content_type =~ %r(video)
end
然後我的執着驗證現在看起來是這樣
validates_attachment_content_type :file, :content_type => [/\Aimage\/.*\Z/, /\Avideo\/.*\Z/, /\Aaudio\/.*\Z/, /\Aapplication\/.*\Z/]
用這種方法,我現在可以用一個曲別針的方法來處理多種文件類型。
爲什麼downvote?這是一個合法的問題! –