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 に答える