2011-04-05 34 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

相關問題