2013-02-08 18 views
6

Diğer mime türlerini de içerebilen content_type = "application/pdf" değişkenini göz önünde bulundurun.Belirli bir içerik türü için varsayılan uzantı nasıl alınır?

İçerik türü için varsayılan uzantıyı nasıl alabilirim?

Şu anda çok "karmaşık" görünen iki çözüm var.

Hack dize

content_type.split("/")[1] 

Kullanım MIME :: Türleri

require 'mime/types' 
    MIME::Types[content_type].first.extensions.first 

daha iyi bir çözüm var mı?

+0

İkinci çözümünüzü kullanarak çekicilikte çalıştık. Bu arada, raylar uygulamasında mime/türlere gerek duymadım. –

cevap

3

Mime türüyle ikinci çözümünüz, seçmeniz gereken çözümdür. Bunun için çeşitli nedenleri vardır:

  • ikinci çözüm tam
  • Hack the string tutarsız veya beklenmeyen sonuçlar
  • düşünün (! yaklaşık application/postscript uzatma eps düşünüyorum) geri dönebilirler sizin kullanım durumu için tasarlanmıştır, Muhtemelen söyleyemeyiz, her mime türünün varsayılan uzantısı var. Örneğin: jpg (veya jpeg veya JPG ..) resimleri için varsayılan uzantıyı kim tanımladı?
8

Tek yapmanız gereken, ruby'nin Hash.invert yöntemini kullanmaktır.

Rack::Mime bu yeteneğe sahiptir (ve Raf Raylar bağımlılığıysa):

require 'rack/mime' 
Rack::Mime::MIME_TYPES.invert['image/jpeg'] #=> ".jpg" 

Sen eğer ters karma memoize isteyebilirler

This answer

nasıl yapılacağını gösterir Ucuz bir işlem olmadığından, genellikle arama yapmak için gidiyor.

Etiketlerden, zaten ray kullanıyorsunuz.

İlgili konular