2015-01-11 11 views
5

Ich möchte einen Teil erstellen, der ein paar Sekunden dauert, um zu rendern. Ich habe Funktionen gesehen, die Proxies verwenden, um den Cache über HTTP vorzuladen, aber ich hätte gerne eine "interne" Lösung.Pre-Build-Fragment-Cache (interner Ansatz)

Dies ist meine Funktion, die aufgerufen wird, wenn myobject aktualisiert:

def pre_build_partial myobject 
    the_controller = ActionController::Base.new 
    the_controller.instance_variable_set '@myobject', myobject 

    view_renderer = ActionView::Renderer.new the_controller.lookup_context 
    view_renderer.render the_controller.view_context, { partial: 'mypartial', layout: false } 
end 

Es funktioniert für partials fein, die grundlegende Helfer verwenden, aber meine benutzerdefinierten Helfer werfen Fehler:

undefined method `my_custom_helper_function' for #<#<Class:...>

Ich denke, der Helfer muss in the_controller enthalten sein, aber ich finde keinen Weg, dies zu tun. Danke für jede Hilfe im Voraus!

+0

Können Sie mir zeigen, die Sie auf die Codes setzen Datei? –

+0

willst du wahrscheinlich 'ApplicationController.new' denn da ist schon alles drin? – phoet

+0

Phoets Vorschlag ist ziemlich elegant. Nicht die leichteste Lösung (Sie würden im Idealfall nur den Helfer, den Sie brauchen), aber wenn es funktioniert, bewegen Sie sich in die richtige Richtung. Bitte geben Sie uns ein Update. – Ecnalyr

Antwort