Rails 3:创建新的rails资产助手,如image_tag,指向s3

时间:2012-06-06 18:27:38

标签: ruby-on-rails asset-pipeline

创建新资产标签帮助程序的最佳方法是什么,除了指向s3之外,其工作方式与image_tag完全相同?

所以我希望这件事发生:

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中创建一个新助手吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

如果site.s3 ..不在rails应用程序中而且没有使用asset_pipeline,那么只需在图像src中直接引用url。

如果s3是你的应用程序站点,那么只需在它将用于的上下文中编写一个新助手。

http://site.s3.amazon.com/assets/bar.jpg的内容看起来像

<img src="<%=@root_url%>/assets/bar.jpg" />

那么,为什么另一个不同?我的意思是你为什么有两个?

修改

我要做的就是在应用程序助手中有一个字符串,其中包含托管站点的URL。然后是帮助方法返回图像tag("img", :src => "#{s3_image_link}/bar.jpg")