2011-11-09 34 views
2

我知道这不是一种“可接受”的做法,但作为后台进程,我将渲染的Rails部分缓存到数据库中,以便通过JSONP 。我发现了这个主题的许多资源,并成功地在ActiveRecord模型中输出Rails 2.3.x的部分内容,但是如果我在部分Rails中使用动态URL,则会爆发。在ActiveRecord模型中渲染Rails 2.3.x模板时未定义的方法'url_for'

我得到一个成功的输出(减去动态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

思想工作?

回答

2

我有一个旧的应用程序,我不得不在模型中做类似的事情(但是使用了polymorphic_pathpolymorphic_url)。

以下包括给我访问url_forpolymorphic_path

include ActionView::Helpers::UrlHelper 
include ActionView::Helpers::TagHelper 
include ActionController::PolymorphicRoutes 
include ActionController::UrlWriter 
+0

是由包括::的ActionView Base或ActionController的::基地? – ACuppy

+0

我在我的模型中使用了这些文件,它不在视图或控制器内部 - 它在内部扩展了ActiveRecord :: Base –