24

我正在尝试使用delayed_job通过 xml 更新远程数据库

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

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

我究竟做错了什么?

4

5 回答 5

60
ac = ActionController::Base.new()
ac.render_to_string(:partial => '/path/to/your/template', :locals => {:varable => somevarable})
于 2012-09-26T01:40:44.573 回答
7

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

ApplicationController.new.render_to_string
于 2014-07-14T03:19:02.533 回答
3

render_to_string中定义ActionController::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 的文档

这是一般的想法。

于 2010-04-20T19:47:05.463 回答
3

导轨 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
)

制作 Rails 公关的开发人员的精彩博客文章:https ://evilmartians.com/chronicles/new-feature-in-rails-5-render-views-outside-of-actions

于 2019-02-26T20:05:34.893 回答
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 部分。

于 2010-12-15T16:28:47.400 回答