2010-04-20 8 views
16

estoy tratando de utilizar delayed_job para actualizar una base de datos remota a través de XMLrender_to_string en la clase IIb que no trabaja

En mi carpeta lib pongo un archivo con una clase que debe hacer un render_to_text con template.xml.builder, pero me sale:

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

¿Qué estoy haciendo mal?

Respuesta

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

Si usted está tratando de usarlo con instancia variable, vaya como este ': locals => {: @instance_variable => value}' –

+0

Recibo un error de plantilla faltante, parece que no ha encontrado ese parcial y lo he revisado muchas veces para deletrearlo. aún nada .. Por favor, ayuda – AirWick219

+0

Obtendrás el error "Plantilla faltante" porque 'ActionController :: Base' buscará dentro de la ruta' action_controller/base'. Delegar a otro controlador. Por lo general, hereda 'ActionController :: Base' de todos modos. –

3

render_to_string se define en ActionController::Base. Como la clase/módulo se define fuera del alcance de los controladores Rails, la función no está disponible.

Tendrá que renderizar manualmente el archivo. No sé lo que estás usando para tus plantillas (ERB, Haml, etc.). Pero tendrá que cargar la plantilla y analizarla usted mismo.

Así que si ERB, algo como esto:

require 'erb' 

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

Tendrá que abrir el archivo de plantilla y enviar el contenido a ERB.new, pero que dejó un ejercicio para usted. Aquí están los docs para ERB.

Esa es la idea general.

2

Usted puede convertir su template.xml.builder en un parcial (_template.xml.builder) y luego volverlo creando una instancia de un ActionView::Base y llamando render

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

No he probado con xml todavía, pero funciona bien con parciales html .

+2

consigo: método no definido 'nueva' para rieles :: Configuración: Módulo –

4

he tenido problemas con un método de ayuda indefinido Luego utiliza ApplicationController

ApplicationController.new.render_to_string 
+0

Lo mismo aquí. ¿Alguna vez arregló el ayudante indefinido? – nathanengineer

+0

En mi caso olvidé un espacio de nombres al llamar a AplicationController. Intento: 'Usr :: ApplicationController.new.render_to_string' Y funciona. – Germano