【问题标题】:Calling rails_asset_id directly in controller直接在控制器中调用 rails_asset_id
【发布时间】:2011-04-05 18:12:12
【问题描述】:

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

对于要从 ajax 请求中提取的文件,我需要相同的功能(因此我不能只使用内置的 *_include_tag 函数),我希望在修改它们之前缓存这些文件。有没有办法直接调用 rails_asset_id,这样我就不必重新实现修改后的时间检查并缓存它?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3


    【解决方案1】:

    您可以使用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')
    

    请注意,所有这些技术都是骇人听闻的,并且不会在以后的 Rails 版本中工作,因为它们改变了资产标签助手的组织方式。所以请谨慎行事。

    【讨论】:

    • 有没有办法在视图之外使用它?实际上,我将所需的功能拉入了一个 lib 类,并且在那里使用它时显然得到了一个未定义的方法错误。
    • @ShyGuy:我已经更新了我的答案,在视图之外使用它。
    猜你喜欢
    • 2015-10-02
    • 2016-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-02
    • 1970-01-01
    • 2013-01-03
    相关资源
    最近更新 更多