【发布时间】:2011-10-27 22:48:05
【问题描述】:
我的控制器有这个:
caches_action :render_ticker_for_channel, :expires_in => 30.seconds
在我的路线文件中,我有这个:
match '/render_c_t/:channel_id' => 'render#render_ticker_for_channel', :as => :render_channel_ticker
在日志文件中我看到:
Write fragment views/mcr3.dev/render_c_t/63 (11.6ms)
如何手动过期?我需要从与渲染控制器不同的控制器使它过期,但即使在渲染控制器中我也无法让它过期。
如果我这样做:
expire_action(:controller => 'render', :action => 'render_ticker_for_channel', :id => c.id)
我明白了:
Expire fragment views/mcr3.dev/render/render_ticker_for_channel/63 (3.2ms)
如果我这样做:
expire_action(:controller => 'render', :action => 'render_c_t', :id => c.id)
我明白了:
Expire fragment views/mcr3.dev/render/render_c_t/63 (3.2ms)
这个:
expire_action("render_c_t/#{c.id}")
产生:
Expire fragment views/render_c_t/63 (3.5ms)
如何让它与“caches_action”产生的路径相同?!
【问题讨论】:
-
我没有足够的信心将此添加为完整的答案,但是您是否尝试过后门?
Rails.application.routes.url_helpers将允许您访问您的助手并返回一个字符串,该字符串是路径和/或 URL,它将在 Location 标头中发送到浏览器。试试Rails.application.routes.url_helpers.render_ticker_for_channel_path(63)和Rails.application.routes.url_helpers.render_ticker_for_channel(63, :host => 'mcr3.dev')你也许可以将结果字符串(通过一些操作)传递给expire_action并让它找到正确的缓存块。丑陋,但可能有用
标签: ruby-on-rails ruby ruby-on-rails-3 caching