2012-06-06 24 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

这个想法是,当图像不需要通过资产管道时,拥有指向托管在亚马逊上的静态资产的单独图像助手会更干净。我可以使用直接的亚马逊网址,但它很长很丑,让我很难过。 –