Rails - Wie HTML-Ausgabe eines HAML teilweise als Zeichenfolge speichern an einen externen Dienstleister zu schicken?

StackOverflow https://stackoverflow.com/questions/1261422

Frage

Hey Jungs, erster Beitrag hier, hoffen, dass Sie mir helfen können.

Wir erzeugen, einen Newsletter automatisch alle 24 Stunden eine Harke Aufgabe verwenden. Es gibt einen Abschnitt an der Spitze des Newsletters, wo ein Administrator eine eigene Meldung setzen kann. Der Bildschirm, dass der Server-Betreiber verwendet, hat eine Live-Vorschau des Newsletters (sie auf diese hartnäckig waren), eine haml Teil gerendert, das eine Sammlung nimmt.

Um die E-Mails zu generieren und zu senden, senden wir XML-Dokumente an einen Dritten API, die (unter anderem) enthalten den HTML-Code für die E-Mail, die wir möchten, erzeugen.

Was ich tun möchte, ist die Ausgabe dieses haml Teil innerhalb einer Harke Aufgabe zu speichern, so etwas wie PHP ob _ * () Pufferfunktionen. Gibt es eine Möglichkeit etwas wie die folgenden zu tun:

ob_start();
render :partial => newsletter, :collection => posts
newsletter_html = ob_get_contents()
xml = "
<Creative>
  <Name>Our Newsletter -- #{Time.now.strftime('%m/%d/%Y')}</Name>
  <HTML>&lt;html&gt;&lt;body&gt;#{newsletter_html}&lt;/body&gt;&lt;/html&gt;</HTML>
  ...
</Creative>"

ich wahrscheinlich bin fehlt etwas offensichtlich, und ich konnte ein paar Möglichkeiten denken, dies zu tun, aber die meisten von ihnen nicht trocken sind, und ich will nicht viel html in den Helfern, Modelle zu erzeugen, oder Aufgabe selbst.

Lassen Sie mich wissen, ob es einen Weg für mich ist, dies zu erreichen. Danke.

War es hilfreich?

Lösung

Ein üblicher Weg, dies zu tun (was gegen Regel empfohlen wird) ist in einen String in Ihrem Modell oder Rake Aufgabe zu machen:


cached_content = 
  ActionView::Base.new(Rails::Configuration.new.view_path).render(:partial => "newsletter", :locals => {:page => self,:collection => posts})

siehe hier, um eine vollständige Beschreibung: http: // www .compulsivoco.com / 2008/10 / Rendering-Schienen-partials-in-a-Modell-oder-Hintergrund-Aufgabe /

Wenn Sie Seite oder Fragment-Caching verwenden, können Sie den Inhalt aus dem Cache ziehen. Der einfachste Weg, dies zu tun ist, um nur das Caching zu aktivieren, und dann schauen, wo die Dateien gespeichert werden.

http://guides.rubyonrails.org/caching_with_rails.html

Andere Tipps

Ein direkterer Ansatz aus der HAML docs :

require 'haml'
haml_string = "%p Haml-tastic!"
engine = Haml::Engine.new(haml_string)
engine.render #=> "<p>Haml-tastic!</p>\n"

Sie werden ein wenig Arbeit zu tun haben, die HAML Vorlage geladen und alle lokalen Variablen einrichten, die Interpolation benötigen, aber die Flexibilität für nachholen kann.

Ein bisschen wie ein Schuss im Dunkeln, aber wenn Sie die rdoc für Haml Besuche es mehr als wahrscheinlich hat eine Methode, die einen String und einige Variablen akzeptiert und dann macht die Ausgabe.

Mit ERB würde es in etwa so aussehen:

require 'erb'

name = 'world'
template = 'hello <%= name %>'
template = ERB.new(template)
puts template.result(binding)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top