2010-04-20 15 views
16

Sto cercando di utilizzare delayed_job per aggiornare un database remoto tramite XMLrender_to_string in classe lib non funziona

Nella mia cartella lib ho messo un file con una classe che dovrebbe fare un render_to_text con template.xml.builder, ma ottengo:

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

Cosa sto sbagliando?

risposta

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

se si sta cercando di utilizzare con un'istanza variabile, vai in questo modo:: locals => {: @instance_variable => value} ' –

+0

Ricevo errore modello mancante, sembra che non sia stato trovato parziale e ho controllato molte volte l'ortografia. ancora niente .. Per favore aiuto – AirWick219

+0

Otterrai l'errore "Modello mancante" perché "ActionController :: Base" cercherà all'interno del percorso "action_controller/base". Delega ad un altro controller. Di solito eredita comunque 'ActionController :: Base'. –

3

render_to_string è definito in ActionController::Base. Poiché la classe/modulo è definita al di fuori dell'ambito dei controller Rails, la funzione non è disponibile.

È necessario eseguire manualmente il rendering del file. Non so cosa stai usando per i tuoi modelli (ERB, Haml, ecc.). Ma hai intenzione di caricare il modello e analizzarlo da solo.

Quindi, se ERB, qualcosa di simile:

require 'erb' 

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

Si dovrà aprire il file di modello e inviare il contenuto a ERB.new, ma che ha lasciato un esercizio per voi. Ecco lo docs per ERB.

Questa è l'idea generale.

2

Si potrebbe trasformare la vostra template.xml.builder in un parziale (_template.xml.builder) e poi renderlo istanziando un ActionView::Base e chiamando render

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

non l'ho ancora provato con XML, ma funziona bene con i parziali html .

+2

ottengo: metodo non definito 'nuova' per Rails :: Configurazione: Modulo –

4

ho avuto problemi con un metodo di supporto non definito poi ho usato ApplicationController

ApplicationController.new.render_to_string 
+0

Lo stesso qui. Hai mai aggiustato l'aiutante indefinito? – nathanengineer

+0

Nel mio caso ho dimenticato uno spazio dei nomi quando ho chiamato AplicationController. Provo: 'Usr :: ApplicationController.new.render_to_string' E funziona. – Germano

Problemi correlati