2010-05-27 11 views
8

मैं सभी प्रकार की फाइलें (टेक्स्ट दस्तावेज़, बाइनरी, छवियां) अपलोड करने के लिए पेपरक्लिप का उपयोग कर रहा हूं।पेपरक्लिप में शैलियां केवल तभी होती हैं जब यह एक छवि [रेल]

मैं अपने मॉडल में इस डाल करने के लिए करना चाहते हैं:

has_attached_file :attachment, :styles => { :medium => "300x300>", :thumb => "100x100>" } 

लेकिन यह करता है, तो यह एक छवि है शैलियों केवल पालन किया है। मैंने

if :attachment_content_type =~ /^image/ 

जोड़ने का प्रयास किया लेकिन यह काम नहीं किया।

उत्तर

15

आप before_<attachment>_post_process कॉलबैक का उपयोग गैर-छवियों के लिए थंबनेल पीढ़ी को रोकने के लिए कर सकते हैं। यदि आप कॉलबैक में false वापस करते हैं, तो शैलियों का उपयोग करने के लिए कोई प्रयास नहीं होगा।

देखें "ईवेंट" docs

before_attachment_post_process :allow_only_images 

    def allow_only_images 
    if !(attachment.content_type =~ %r{^(image|(x-)?application)/(x-png|pjpeg|jpeg|jpg|png|gif)$}) 
     return false 
    end 
    end 
3

में खंड हो सकता है आप कुछ इस तरह की जरूरत है:

:styles => lambda { |attachment| 
    !attachment.instance.image? ? {} : {:thumb => "80x24", :preview => "800x600>"} 
} 

और अपने मॉडल में विधि को परिभाषित:

def image? 
    attachment.content_type.index("image/") == 0 
end 
1

आप उपयोग कर सकते हैं आपके मॉडल पर

`has_attached_file :avatar, 
     :styles => lambda { |a| if a.content_type =~ %r{^(image|(x-)?application)/(x-png|pjpeg|jpeg|jpg|png|gif)$} 
          { 
          :thumb => "100x100#", 
          :medium => "300x300>", 

          } 
         else 
          Hash.new 
         end 
         },:default_url => "/missing.png"` 
संबंधित मुद्दे