7

我正在使用以下内容:

has_attached_file :file,:styles => { :thumbnail => '320x240!'},:url => "/images/:attachment/:id/:style/:basename.:extension",:path => ":rails_root/public/images/:attachment/:id/:style/:basename.:extension"

validates_attachment_content_type :file, :content_type => [ 'image/gif', 'image/png', 'image/x-png', 'image/jpeg', 'image/pjpeg', 'image/jpg' ]

上传图片和视频。如果我使用:style =>{},则图像不会上传。:style只有当文件的内容类型是图像时,我才想使用方法。

4

2 回答 2

6

您可以在 lambda 中使用条件,对于丑陋的格式感到抱歉:

has_attached_file :file, :styles => lambda 
{ |a| 
      if a.instance.is_image?
        {:thumbnail => "320x240!"}
      end
}


def is_image?
    return false unless asset.content_type
    ['image/jpeg', 'image/pjpeg', 'image/gif', 'image/png', 'image/x-png', 'image/jpg'].include?(asset.content_type)
end
于 2012-09-30T19:49:06.887 回答
3

2016 年更新:

大多数赞成的答案仍然有效,但如果它不是预期的类型(例如,您不想处理的 PDF 而不是图像),您需要返回一个空哈希,否则您会遇到TypeError - can't dup NilClass问题。

为了简洁起见,使用三元组的示例:

has_attached_file :file, :styles => lambda { |a| a.instance.is_image? ? {:thumbnail => "320x240!"} : {} }
于 2016-03-28T15:39:27.390 回答