3

在 Rails 中,当提供静态文件时,您会得到一个asset ID附加到 URL 的内容,例如,

<script src="/javascripts/application.js?1300371955" ...
<link href="/stylesheets/custom.css?1299690788" ...

这样,如果文件的时间戳改变并且浏览器自动请求新文件,静态文件的 URL 也会改变。

我看到通过使用包含静态资产的辅助方法 ---stylesheet_link_tag和--- Rails 自动将时间戳添加javascript_include_tagimage_tag对这些文件的所有引用。

如何为没有此类辅助方法的其他资产(
例如 .swf文件)实现类似的东西?

这个强制重新下载的“策略”有名字吗,如果有,叫什么名字?

4

2 回答 2

4

将时间戳附加到资产的 Rails 方法称为 rails_asset_id,并在 ActionView::Helpers::AssetTagHelper 中定义。虽然它是一种私有方法,但可以在帮助程序中访问它,以便为您的自定义标签生成一个,如下所示:

def swf_param_tag(path)
  asset_id = rails_asset_id(path)
  "<param name='movie' value='#{path}?#{asset_id}'/>"
end

它需要你传入路径,因为它会调用 File.mtime(path).to_i.to_s 来获取它的最后修改时间。

这里有关于资产标签给你带来什么的进一步解释:http: //api.rubyonrails.org/classes/ActionView/Helpers/AssetTagHelper.html

于 2011-03-18T20:59:00.683 回答
0

@Unixmonkey:您的解决方案效果很好。

作为替代方案,还有swf_fu插件:

像对待任何其他资产(图像、javascript 等)一样对待您的 Adob​​e Flash swf 文件并使用 SWFObject 2.2 嵌入它们

内置资产标签

于 2011-03-21T20:38:48.723 回答