2010-04-20 56 views
16

我試圖使用delayed_job通過XMLrender_to_string在LIB類不工作

更新遠程數據庫在我的lib文件夾,我把同一個類文件應該做template.xml.builder一個render_to_text,但我得到:

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

我在做什麼錯?

回答

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

如果你試圖用實例使用變量,像這樣':locals => {:@instance_variable => value}' – 2013-05-15 02:13:14

+0

我得到Missing模板錯誤,好像它沒有發現部分內容,我檢查了很多次拼寫。仍然沒有..請幫助 – AirWick219 2014-09-27 06:16:13

+0

你會得到「Missing template」錯誤,因爲ActionController :: Base會在'action_controller/base'路徑中搜索。委託給另一個控制器。無論如何它通常會繼承'ActionController :: Base'。 – 2014-10-15 08:57:16

3

render_to_string定義於ActionController::Base。由於類/模塊定義在Rails控制器範圍之外,因此該功能不可用。

你將不得不手動渲染文件。我不知道你在使用你的模板(ERB,Haml等)。但是你將會加載模板並自己解析它。

所以,如果僱員再培訓局,這樣的事情:

require 'erb' 

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

你將不得不打開模板文件和內容發送到ERB.new,但練習留給你。以下是ERB的docs

這是一般的想法。

2

你可以把你的template.xml.builder到部分(_template.xml.builder),然後通過實例化一個ActionView::Base,並呼籲render

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

我還沒有使用XML嘗試過它渲染它,但它與HTML的諧音效果很好。

+2

我得到的問題:未定義的方法'新」爲Rails ::配置Module – 2011-09-26 05:48:24

4

我曾與一個不確定的輔助方法,然後我用的ApplicationController

ApplicationController.new.render_to_string 
+0

同樣在這裏。你有沒有修復未定義的幫手? – nathanengineer 2015-05-03 18:29:56

+0

在我的情況下,我在調用AplicationController時忘記了一個名稱空間。 我嘗試: 'Usr :: ApplicationController.new.render_to_string' 它的工作原理。 – Germano 2015-05-04 19:40:26