2011-08-26 30 views
7

Ruby on Rails v3.0.9 kullanıyorum ve numaralı resmi görmek istiyorum (benim durumumda favicon.ico simge resmi) bir web sitesinden başarıyla alındı ​​ve eğer özel bir resim görüntülemek istemiyorum. Bir web sitesi ile ilgili favicon.ico görseli getirmeye amacıylaBir web sitesinde bir resmin bulunup bulunmadığı nasıl kontrol edilir?

, benim bakış dosyasında Ben:

image_tag "#{web_site.link}/favicon.ico", :size => "16x16" 

web_site.link değerleri aşağıdakilerden gibi bir şey nerede:

http://stackoverflow.com/ 
http://www.stackoverflow.com/ 
http://facebook.com/ 
... 

Nasıl bir görüntü nasıl işlemek için bir web sitesine (belki bir if ... else ... end ifadesini kullanarak veya site simgesi görüntüleri işlemek için önce bazı HTTP isteği gerçekleştirmek) ve üzerinde bulundu olmadığını kontrol Yukarıdaki senaryo? Eğer sayfanın oluşturulmasına önce görüntü sunucu tarafında getirme sürece

cevap

6

Burada asıl soruya vardı fikri uygulamaya nasıl.

bu yaklaşımla sorunun yanıt süreleri ancak uzun bir görsel için isteğine yanıt diğer etki için gereken içereceğini olacak. Bu site sorunlarına sahipse, istek zaman aşımına uğramadan sayfanız yüklenmez.

<% 
img_url = 'http://adomain.com/image.jpg' 
res = Net::HTTP.get_response(URI.parse(img_url)) 
img_url = '[my alternate url]' unless res.code.to_i >= 200 && res.code.to_i < 400 #good codes will be betweem 200 - 399 
%> 

<%=image_tag img_url%> 

jQuery yaklaşımı biraz daha ilgilidir. Aşağıdaki boyunca bir şey öneririm:

  • yerine başarı geri aramasında uzaktan görüntüsü
    • için $.ajax çağrısı çalıştırmak sayfanın javascript bir saydam ara görüntüsü
    • ile <img> etiketi oluşturmak <img> yedek resmin URL'sini içeren s src 'başarısızlık geri aramasında uzak images en url
    • ile s src <img> yerine'

Maalesef, şu anda bunun tam kodunu oluşturmak için zamanım yok.

+0

"Maalesef, şu anda bunun için tam kodu oluşturmak için zamanım yok." : '- (... Kendimi deneyeceğim ... – Backo

+0

Neden "to_f" yi kullanıyorsun? Durum kodu int değil bir float mı? – new2cpp

+0

@ new2cpp neden "to_f" kullandığını anlayamıyorum tepki –

-1

Sen Rails ile bunu yapamaz. Yapabildiğiniz şey, bir JavaScript ile istemciye getirmektir ve eğer sorun çıkarsa, bir alternatife geçin.

+0

nasıl JavaScript sayfası (jQuery 1.6 kullanıyorum) render önce görüntü sunucu tarafı getirebilir? – Backo

+0

Her iki açıdan da seçeneğiniz var, ama [curb] (http://curb.rubyforge.org/) gem en iyi seçenek olabilir. Ayrıca, her ikisini de değil, sunucu tarafı * veya * istemci tarafı JavaScript ile indirin. Sadece birinin bağlantı işlerini doğrulaması gerekiyor, sadece kimin seçmesi gerekiyor. Bu sunucu tarafını yapıyorsanız, muhtemelen bir eşleme tablosunu dolduran bir arka plan işlemi olarak çalıştırmak istersiniz. – tadman

+0

Neden Ruby standart kütüphanesini değil, 'curb' gemini kullanmamı öneriyorsunuz? – Backo

İlgili konular