2010-05-27 29 views
8

Tôi đang sử dụng kẹp giấy để tải lên tất cả các loại tệp (tài liệu văn bản, nhị phân, hình ảnh).Kiểu trong kẹp giấy chỉ khi đó là hình ảnh [đường ray]

Tôi muốn đặt điều này trong mô hình của tôi:

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

nhưng nó có để thực hiện các phong cách chỉ nếu đó là một hình ảnh. Tôi đã thử thêm

if :attachment_content_type =~ /^image/ 

nhưng nó không hoạt động.

Trả lời

15

Bạn có thể sử dụng before_<attachment>_post_process gọi lại để tạm dừng tạo hình thu nhỏ cho hình ảnh không phải. Nếu bạn trả về false khi gọi lại, sẽ không có cố gắng sử dụng kiểu.

Xem "Sự kiện" phần trong 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

Có thể bạn cần một cái gì đó như thế này:

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

Và xác định phương pháp trong mô hình của bạn:

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

Bạn có thể sử dụng trên mô hình của bạn

`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"` 
Các vấn đề liên quan