2010-04-20 8 views
16

Ich versuche delayed_job zu verwenden, um eine Remote-Datenbank über XML zu aktualisierenrender_to_string in lib Klasse nicht funktioniert

In meinem lib Ordner habe ich eine Datei mit einer Klasse, die ein render_to_text mit template.xml.builder tun soll, aber ich bekommen:

undefined method `render_to_string' for #<SyncJob:0x7faf4e6c0480>... 

Was mache ich falsch?

Antwort

51
ac = ActionController::Base.new() 
ac.render_to_string(:partial => '/path/to/your/template', :locals => {:varable => somevarable}) 
+9

Wenn Sie versuchen, es zu benutzen, mit Instanz Variable, gehen Sie wie folgt ': localhosts => {: @instance_variable => Wert}' –

+0

Ich bekomme fehlende Vorlage Fehler, es scheint wie es nicht gefunden, dass teilweise und ich habe viele Male für die Rechtschreibung überprüft. immer noch nichts .. Bitte helfen Sie – AirWick219

+0

Sie erhalten "Fehlende Vorlage" Fehler, weil "ActionController :: Base" innerhalb 'action_controller/base' Pfad suchen wird. Delegieren an einen anderen Controller. Normalerweise erbt es trotzdem "ActionController :: Base". –

3

render_to_string ist definiert in ActionController::Base. Da die Klasse/das Modul außerhalb des Bereichs der Rails-Controller definiert ist, ist die Funktion nicht verfügbar.

Sie müssen die Datei manuell rendern. Ich weiß nicht, was Sie für Ihre Vorlagen verwenden (ERB, Haml usw.). Aber Sie werden die Vorlage laden und selbst analysieren.

Also, wenn ERB, etwa so:

require 'erb' 

x = 42 
template = ERB.new <<-EOF 
    The value of x is: <%= x %> 
EOF 
puts template.result(binding) 

Sie die Vorlage-Datei öffnen und den Inhalt zu ERB.new, sondern dass eine Übung, die für Sie zu schicken. Hier sind die docs für ERB.

Das ist die allgemeine Idee.

2

Sie könnten Ihre template.xml.builder in einen Teil drehen (_template.xml.builder) und es dann machen, indem sie ein ActionView::Base Instanziieren und Aufrufen render

av = ActionView::Base.new(Rails::Configuration.new.view_path) 
av.extend ApplicationController.master_helper_module 
xml = av.render :partial => 'something/template' 

ich es noch mit xml nicht versucht, aber es funktioniert gut mit HTML partials .

+2

erhalte ich: nicht definierte Methode 'neue‘ für Rails :: Konfiguration: Modul –

4

Ich hatte Probleme mit einer nicht definierten Hilfsmethode dann verwendet i Application

ApplicationController.new.render_to_string 
+0

Das gleiche hier. Hast du jemals den undefinierten Helfer repariert? – nathanengineer

+0

In meinem Fall habe ich einen Namespace beim Aufruf von AplicationController vergessen. Ich versuche: 'Usr :: ApplicationController.new.render_to_string' Und es funktioniert. – Germano