2012-06-06 73 views
1

創建一個新的資產標籤助手的最佳方式是什麼?除了指向s3之外,其工作方式與image_tag完全相同?Rails 3:創建類似image_tag的新rails資產助手,指向s3

所以我想這樣的事情發生:

image_path "foo.jpg" # => "/assets/foo.jpg" (default behavior) 
s3_image_path "bar.jpg" # => "http://site.s3.amazon.com/assets/bar.jpg" 

會做到這一點的最好方式只是爲了在application_helper.rb一個新的幫手?

回答

3

我剛剛結束了在寫新application_helper.rb助手來模仿默認資產傭工像這樣的形象:

def s3_image_path(filename) 
    "http://site.s3.amazonaws.com/assets/#{filename}" 
end 

def s3_image_tag(filename, options={}) 
    image_tag(s3_image_path(filename), options) 
end 

所以s3_image_tag("image.jpg")將指向http://site.s3.amazonaws.com/assets/image.jpg

+0

這太好了。我想知道你如何處理與S3的資產預編譯同步? – gingerlime

0

如果site.s3 ..不在rails應用程序中並且沒有使用asset_pipeline,那麼只需在圖像src中直接引用url。

如果s3是您的應用程序站點,那麼只是在它將用於的上下文中編寫一個新的幫助程序。

或者東西http://site.s3.amazon.com/assets/bar.jpg會是什麼樣子

<img src="<%[email protected]_url%>/assets/bar.jpg" /> 

那麼,爲什麼其他的有什麼不同?我的意思是你爲什麼有兩個?

編輯:

我會做的只是有一個串保持的URL在應用助手的託管網站。然後輔助方法返回tag("img", :src => "#{s3_image_link}/bar.jpg")

+0

這個想法是,當圖像不需要通過資產管道時,擁有指向託管在亞馬遜上的靜態資產的單獨圖像助手會更乾淨。我可以使用直接的亞馬遜網址,但它很長很醜,讓我很難過。 –