Ответ 1
ac = ActionController::Base.new()
ac.render_to_string(:partial => '/path/to/your/template', :locals => {:varable => somevarable})
Я пытаюсь использовать delayed_job
для обновления удаленной базы данных через xml
В моей папке lib я помещаю файл с классом, который должен делать render_to_text
с template.xml.builder
, но я получаю:
undefined method `render_to_string' for #<SyncJob:0x7faf4e6c0480>...
Что я делаю неправильно?
ac = ActionController::Base.new()
ac.render_to_string(:partial => '/path/to/your/template', :locals => {:varable => somevarable})
У меня были проблемы с вспомогательным методом undefined, после чего я использовал ApplicationController
ApplicationController.new.render_to_string
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.
Это общая идея.
Вы можете превратить ваш 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.