Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 仅当contenttype为image时,如何设置回形针样式?_Ruby On Rails_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 仅当contenttype为image时,如何设置回形针样式?

Ruby on rails 仅当contenttype为image时,如何设置回形针样式?,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我正在使用以下工具: 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

我正在使用以下工具:

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
方法。

您可以使用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
2016年更新:

大多数向上投票的答案仍然有效,但如果它不是预期的类型(例如,您不想处理的PDF而不是图像),则需要返回一个空哈希值,否则您将遇到
TypeError-cannotdup NilClass
问题

为了简洁起见,使用三元混合物进行取样:

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

您应该使用before\u post\u process For
is\u image
可能
(asset.content\u type | | |“”).split(“/”)。first==“image”
。或者简单地说:
/image\/.match(asset.content\u type)