3

Rails 2.3 アプリを Rails 3.2 に移行しています。さまざまなソースから収集したいくつかの統計情報のキャッシュを管理するために使用するオブジェクトがあります。コレクションの処理に時間がかかるため、従来のフラグメントキャッシングでは対応できませんでした。非同期でキャッシュを埋める必要がありました。AsynchCache オブジェクトを使用して、Google アナリティクスからデータを取得し、パーシャルのコンテンツをキャッシュに保存します。

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

インクルード 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 に答える