2011-04-05 60 views
0

有没有办法调用私有函数rails_asset_id(http://apidock.com/rails/v3.0.5/ActionView/Helpers/AssetTagHelper/rails_asset_id)来生成缓存清除密钥?直接在控制器中调用rails_asset_id

我需要相同功能的文件,我将从ajax请求下拉(所以我不能只使用内置的* _include_tag函数),我希望被缓存,直到它们被修改。有没有办法直接调用rails_asset_id,这样我就不必重新实现修改后的时间检查并缓存它呢?

回答

0

您可以使用send来调用私有方法。要使文件时间戳正常工作,rails_asset_id要求资产文件位于assets_dir之内,默认情况下为/public目录。这里有一个例子:

# Get asset id for the file /public/json/example.json 
send(:rails_asset_id, 'json/example.json') 

如果你在视图外使用它,这是一种方法。

require 'action_view/helpers/asset_tag_helper' 
include ActionView::Helpers::AssetTagHelper 
send(:rails_asset_id, 'json/example.json') 

注意,所有的这些技术的hackish和,因为他们已经改变了资产标签佣工的组织方式on Rails的未来版本将无法正常工作。所以谨慎行事。

+0

有没有办法在视图之外使用它?实际上,我将所需的功能提取到一个lib类中,并且在那里使用它时显然会遇到未定义的方法错误。 – Paul 2011-04-13 20:57:40

+0

@ShyGuy:我已经更新了我在视图外使用它的答案。 – htanata 2011-04-14 02:24:42