Render_to_string в классе lib не работает

Я пытаюсь использовать delayed_job для обновления удаленной базы данных через xml

В моей папке lib я помещаю файл с классом, который должен делать render_to_text с template.xml.builder, но я получаю:

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

Что я делаю неправильно?

Ответы

Ответ 1

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

Ответ 2

У меня были проблемы с вспомогательным методом undefined, после чего я использовал ApplicationController

ApplicationController.new.render_to_string

Ответ 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, но это упражнение осталось для вас. Ниже приведены docs для ERB.

Это общая идея.

Ответ 4

Вы можете превратить ваш 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.