lib类中的render_to_string不起作用

时间:2010-04-20 19:33:29

标签: ruby-on-rails templating

我正在尝试使用delayed_job通过xml

更新远程数据库

在我的lib文件夹中,我放了一个文件,其中的类应该render_to_texttemplate.xml.builder,但我得到:

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

我做错了什么?

5 个答案:

答案 0 :(得分:54)

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

答案 1 :(得分:5)

我遇到了一个未定义的辅助方法问题,然后我使用了ApplicationController

ApplicationController.new.render_to_string

答案 2 :(得分:3)

render_to_stringActionController::Base中定义。由于类/模块是在Rails控制器范围之外定义的,因此该功能不可用。

您将不得不手动渲染文件。我不知道你用什么模板(ERB,Haml等)。但是你将加载模板并自己解析它。

所以如果ERB,就像这样:

require 'erb'

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

您必须打开模板文件并将内容发送到ERB.new,但这项练习还是留给您的。以下是ERB的docs

这是一般的想法。

答案 3 :(得分: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 partials。

答案 4 :(得分:0)

路轨5

render_to_string等现在可以在控制器上用作类方法。因此,您可以使用任何喜欢的控制器执行以下操作:ApplicationController.render_to_string

我特别需要根据对象的类为模板分配动态实例变量,因此我的示例如下:

ApplicationController.render_to_string(
  assigns: { :"#{lowercase_class}" => document_object },
  inline: '' # or whatever templates you want to use
)

开发者的出色博客文章,宣传了PR:https://evilmartians.com/chronicles/new-feature-in-rails-5-render-views-outside-of-actions