undefined方法`fragment_for'表示nil:NilClass on render partial with cache

时间:2012-10-02 07:00:13

标签: ruby-on-rails caching partials

我在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中找到的确切内容。

2 个答案:

答案 0 :(得分:0)

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

更新:

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

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

答案 1 :(得分:0)

您可以添加:

include ActionController::Caching

到你的班级。