当我加载 /reports/generate_report 时,我的 rails 应用程序会生成 XML。
在单独的页面上,我想将此 XML 读入一个变量并将其保存到数据库中。
我怎样才能做到这一点?我可以以某种方式将来自 /reports/generate_report.xml URI 的响应流式传输到变量中吗?还是有更好的方法来做到这一点,因为 XML 是由同一个 Web 应用程序生成的?
这是我的 generate_report 操作:
class ReportsController < ApplicationController
def generate_report
respond_to do |format|
@products = Product.all
format.xml { render :layout => false }
end
end
end
这是我要编写的操作:
class AnotherController < ApplicationController
def archive_current
@output = # get XML output produced by /reports/generate_report
# save @output to the database
respond_to do |format|
format.html # inform the user of success or failure
end
end
end
已解决:我的解决方案(感谢 Mladen Jabnović):
@output = render_to_string(:file => 'reports/generate_report.xml.builder')
我在模型类中使用了以下代码来完成相同的任务,因为 render_to_string (愚蠢地)是 ActionController::Base 的受保护方法:
av = ActionView::Base.new(Rails::Configuration.new.view_path)
@output = av.render(:file => "reports/generate_report.xml.builder")