2

これが「容認できる」プラクティスではないことはわかっていますが、バックグラウンド プロセスとして、レンダリングされた Rails パーシャルをデータベースにキャッシュして、JSONP 経由で高速に出力できるようにしています。このトピックに関する多くのリソースを見つけ、ActiveRecord モデル内で Rails 2.3.x パーシャルを正常に出力しましたが、Rails パーシャル内で動的 URL を使用すると失敗します。

これで成功した出力(動的URLを除く)が得られます...

def self.compile_html  

  viewer = Class.new(ApplicationController)
  path = ActionController::Base.view_paths rescue ActionController::Base.view_root

  Question.all.each do |q|
  q.html = ActionView::Base.new(path, {}, viewer).render(:partial => "questions/cached_output", :locals => { :question => q })  
  sleep 1 # hold for complete output and debugging only
  q.save( false ) # bypass validations
  end
  return "Caching complete"
end

ActionController::UrlWriterモジュールを含めようとActionView::Helpers::UrlHelperしましたが、うまくいきませんでした。ActionController::Base.new.url_for()パーシャルがパーシャルに動的ルートを書き込むためにアクセスできるようにするためのインスタンス化/包含順序を見つけることができないようです。

RoR: undefined method `url_for' for nil:NilClassと同様のプロセスを試みましたが、うまくいきませんでした

render_anywhere が Rails 3.x アプリのソリューションであることは知っていますが、Rails 2.3.11 で作業しています。

考え?

4

1 に答える 1

2

モデルで同様のことをしなければならなかった(しかしとを利用したpolymorphic_path)古いアプリがありpolymorphic_urlます。

url_for以下のインクルードは私にpolymorphic_pathなどへのアクセスを与えてくれました。

include ActionView::Helpers::UrlHelper
include ActionView::Helpers::TagHelper
include ActionController::PolymorphicRoutes
include ActionController::UrlWriter
于 2011-11-09T19:35:02.013 に答える