3

我正在将 rails 2.3 应用程序迁移到 rails 3.2。我有一个对象用于管理我从不同来源收集的一些统计数据的缓存。由于采集过程比较长,传统的分片缓存是做不到的。我不得不异步填充缓存。AsynchCache 对象,从 Google Analytics 获取数据并将部分内容存储在缓存中。

include Rails.application.routes.url_helpers

class AsynchCache 

  def self.get_popular_races_from_google_analytics(lang='en')
  # getting info form GA using Garb.
  end

def self.set_popular_races(language=nil)
   av = ActionView::Base.new(Rails.configuration.paths['app/views'])
    language_list = Global.instance.languages_UI.map{|a| a[0]}
    for lang in language.nil? ? language_list : [language]
      output = av.render(
          :partial => "home/popular_races",
          :locals => {:lang => lang}
      )
      Rails.cache.delete("popular_races_#{lang}")
      Rails.cache.write("popular_races_#{lang}",output) 
    end
  end

 def self.get_popular_races(lang='en')
    Rails.cache.read("popular_races_#{lang}")
  end
end

我用于显示的部分如下

  • "> tmp_race.name -%>

当我想显示内容时,我只需要使用:

<div id="popular_races"> <%# AsynchCache.get_popular_races(params[:locale])-%> </div>

当我第一次加载页面或在 irb 中时它工作正常,但如果我尝试重新加载页面或在 development.rb config.cache_classes = true 中设置,我会收到错误:

stack level too deep
Rails.root: /Users/macbook/Sites/marathons

Application Trace | Framework Trace | Full Trace
actionpack (3.2.1) lib/action_dispatch/middleware/reloader.rb:70

如果我删除 include Rails.application.routes.url_helpers,我不会收到错误消息,但当然,我无法访问路由。

是否有一种新方法可以从 rails 3.2 中的模型获取路由方法?

4

1 回答 1

9

我和你有同样的问题。我所做的是,我每次都这样使用它们,而不是包括助手:

Rails.application.routes.url_helpers.object_path(...)

于 2012-05-03T11:49:31.133 回答