【问题标题】:How to render XML template and then use SEND_DATA in Ruby on Rails 3.2.8?如何渲染 XML 模板,然后在 Ruby on Rails 3.2.8 中使用 SEND_DATA?
【发布时间】:2012-09-18 02:24:57
【问题描述】:

任何人都可以帮助我处理 XML 模板渲染和 send_data 吗?

我有一个控制器:

def show
  @calculation = Calculation.find(params[:id])

  respond_to do |format|
    format.html # show.html.erb
    format.json { render json: @calculation }
    format.xml {send_data( :partial=>show.xml.erb, :filename => "my_file.xml" ) }
    format.pdf { render :format=>false}
  end
end

但我有很多“堆栈级别太深”的错误

如果我使用

{send_data( @calculation, :filename => "my_file.xml" ) }

我得到 XML 文件,但不是来自我的模板...

编辑:我有办法!

format.xml do  
  stream = render_to_string(:template=>"calculations/show" )  
  send_data(stream, :type=>"text/xml",:filename => "test.xml")
end

一切正常!

【问题讨论】:

  • 你能发布你的整个跟踪吗?
  • CalculationsController 中的 SystemStackError #show stack level too deep Rails.root: C:/RubyStack-3.2.5-0/examplexml Application Trace |框架跟踪 | Full Trace actionpack (3.2.5) lib/action_dispatch/middleware/reloader.rb:70
  • 我可以在我的 Chrome 中得到结果:format.xml { render :format=>false} 但只有屏幕,而不是要下载的文件
  • 嘿 Dmitry,考虑发布您的问题并将其标记为解决方案。
  • @Dmitry - 如果您想将解决方案概括为您自己的答案,我将删除我的答案。 (请参阅 meta.stackexchange.com/questions/90263/… 详细说明为什么这样做会有所帮助。)谢谢!

标签: ruby-on-rails ruby send


【解决方案1】:

从已编辑的问题正文中复制答案,以便从“未回答”过滤器中删除此问题:

format.xml do  
  stream = render_to_string(:template=>"calculations/show" )  
  send_data(stream, :type=>"text/xml",:filename => "test.xml")
end

~回答Dmitry

【讨论】:

    【解决方案2】:

    你可以用 Rails 5 试试这个

    respond_to do |format|
      format.html do
        stream = render_to_string(:template => "calculations/test.xml.builder")
        send_data stream,
                  :type => 'text/xml; charset=UTF-8;',
                  :disposition => "attachment; filename=test.xml"
      end
    end
    

    【讨论】:

      猜你喜欢
      • 2017-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多