1

我在rails 2.3.14的一些代码中有这段代码:

<% cache "some_partial_#{some_id}" do %>
....
<% end %>

在视图中渲染它时工作正常,但我得到:

undefined method `fragment_for' for nil:NilClass

当我尝试在模型中执行此操作时:

 ActionView::Base.new("app/views").render(:partial => "home/temp"}

我可以看到 actionpack-2.3.14/lib/action_view/helpers/cache_helper.rb:35 中出现的问题

 def cache(name = {}, options = nil, &block)
    @controller.fragment_for(output_buffer, name, options, &block)
 end

我不确定它希望在@controller 中找到什么。

4

2 回答 2

0

您也许可以添加:

include ActionController::Caching

到你的班级。

于 2013-05-16T18:04:05.833 回答
0

简而言之:不要从模型中渲染部分——它们应该只包含业务逻辑。由于缓存调用了由于您在此处绕过视图呈现逻辑而尚未初始化的控制器对象,因此发生错误。

更新:

我看到它的唯一方法是获取控制器实例并将其作为参数传递。如何在模型中获取控制器实例取决于您。我认为这个问题可能会有所帮助

ActionView::Base.new("app/views", {}, @your_controller_instance).render(:partial => "home/temp")
于 2012-10-02T07:29:16.267 回答