Schienen: Render Blick von außen-Steuerung
Ich versuche zu erstellen, die ein HTML-string mit einem Blick. Ich würde gerne machen das aus einer Klasse, die nicht einen controller. Wie kann ich die Schienen rendering-engine außerhalb eines Controllers? Ähnlich wie ActionMailer tut?
Dank!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schienen 5 unterstützt nun diese in einem viel bequemer Weise, mit der die Erstellung einer Anfrage und so weiter hinter den kulissen:
Macht dies
app/views/users/show.html.erb
und legt die@user
Instanz-variable, so dass Sie nicht brauchen, um änderungen an Ihrer Vorlage. Es verwendet automatisch die angegebene layout inApplicationController
(application.html.erb
standardmäßig).Der test zeigt eine Handvoll zusätzliche Optionen und Ansätze.
views
- Verzeichnis.ActionView::Base.new('app/views').render(file: 'invoices/show', locals: {invoiceObjIn: inv}, layout: 'layouts/invoice')
Devise could not find the 'Warden::Proxy' instance on your request environment.
. Wie lösen Sie diese?locals
fürassigns
für mich gearbeitet.Können Sie ActionView::Base um dies zu erreichen.
Den ActionView::Base initialisieren dauert:
assigns
hash, die Bereitstellung der Variablen für die VorlageWenn Sie aufnehmen möchten, können sich Helfer, die Sie verwenden können, class_eval Sie:
view.render(file: 'template.html.erb', layout: 'layouts/layout.html.erb')
Gibt es keine Notwendigkeit, über aufblasen Ihre app mit zu vielen Edelsteine. Wie wir wissen, dass ERB ist bereits in Ihrer Rails-app.
Oben gibt es code-snippet von einer app an der ich arbeite.
@jdf
ist ein Objekt bewertet werden, in dererb
anzeigen.xml
.result
ist ein string, der gespeichert oder gesendet werden, überall, das Sie mögen.link_to
etc.Technisch
ActionMailer
ist eine Unterklasse Umsetzung vonAbstractController::Base
. Wenn Sie möchten, um diese Funktionalität zu implementieren, die auf Ihre eigenen, werden Sie wahrscheinlich wollen, um zu Erben ausAbstractController::Base
als gut.Gibt es einen guten blog-post hier: https://www.amberbit.com/blog/2011/12/27/render-views-and-partials-outside-controllers-in-rails-3/, erklärt, dass die Schritte, die erforderlich sind.
"Ich versuche, erstellen Sie ein HTML-string mit einem Blick." - Wenn du meinst, du bist in der Kontext eines view-Vorlage, dann verwenden Sie einfach eine helper-Methode machen oder eine partielle.
Wenn Sie in einigen anderen "Plain Old Ruby-Objekt", dann halten Sie daran, Sie sind frei, verwenden Sie die ERB-Modul direkt:
Der trick ist, dass die "verbindlich" - Objekt, das gibt der Kontext für den code in der Vorlage. ActionController und die anderen Schienen Klassen setzen es kostenlos, aber ich konnte Sie nicht finden, einen Verweis, der erklärt, Woher es kommt.
http://www.ruby-doc.org/stdlib-2.2.0/libdoc/erb/rdoc/ERB.html#method-i-result
Für die Zukunft, landete ich zu finden
dieses praktische Schmuckstück ist dies ein Kinderspiel:
https://github.com/yappbox/render_anywhere
Besten zum Rendern der view einen controller, wie das ist, was Sie sind, und dann es in einen string konvertieren, denn das ist Ihr Ziel.