【发布时间】:2011-02-03 22:54:27
【问题描述】:
当我加载 /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")
【问题讨论】:
-
只是好奇您为什么尝试将数据转换为 xml,然后再次将其保存到数据库中。
-
@Salil:我想在数据库中存储以前版本的数据,有点像版本控制。
标签: ruby-on-rails ruby render-to-string