如何渲染 XML 模板,然后在 Ruby on Rails 3.2.8 中使用 SEND_DATA?
Posted
技术标签:
【中文标题】如何渲染 XML 模板,然后在 Ruby on Rails 3.2.8 中使用 SEND_DATA?【英文标题】:How to render XML template and then use SEND_DATA in Ruby on Rails 3.2.8? 【发布时间】: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/… 详细说明为什么这样做会有所帮助。)谢谢! 【参考方案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
【讨论】:
以上是关于如何渲染 XML 模板,然后在 Ruby on Rails 3.2.8 中使用 SEND_DATA?的主要内容,如果未能解决你的问题,请参考以下文章