如何在同一个控制器中将视图/控制器的xml输出作为字符串
这是路线文件
的routes.rb
map.ccda '/ccda/ccda_patient_search', :controller => 'ccda', :action => :ccda_patient_search
map.ccda '/ccda/:id.:format', :controller => 'ccda', :action => :index
ccda_controller.rb
class CcdaController < ApplicationController
def index
#
# some process
# result = User.find(params[:id]).result
#
@ccda = result
respond_to do |format|
format.xml { render :layout => false, :template=> "index.xml.builder" }
format.any { redirect_to login_url }
end
end
def get_xml
# render_to_string 'index', :layout=>false, :formats=>[:xml], :locals=>{:id=>147} => Not working
# render_to_string '147.xml' => Not working
#
# How do I get the output of 'http://localhost/ccda/147.xml' here???
#
end
end
我将使用网址localhost/ccda/147.xml
以xml
现在我希望该网址的输出为字符串而不返回浏览器
我试图使用不同参数的render_to_string
方法从同一控制器获取它但似乎没有任何工作
仅供参考:我使用的是rails 2.3.12和 Builder :: XmlMarkup API
答案 0 :(得分:0)
如何使用以下调用(在控制器内部,已采用您问题中的已知选项):
render_to_string(:template => 'ccda/index.xml.builder', :layout => false, :id => 147)
由于documentation,这将适用于Rails版本2.3.8,因此我不知道它在您使用的Rails 2.3.12中是否可用。
PS:如何升级到至少最新版本的Rails 3?我没有改变来测试我的解决方案,所以它或多或少都是猜测。
答案 1 :(得分:0)
下面怎么样?
render_to_string :controller => 'ccda_controller', :action => 'index', :id => 147, :format => :xml
答案 2 :(得分:0)
最后我发现我们需要手动指定视图文件,因为默认情况下rails会查找index.erb
所以我所做的就是这个
render_to_string( :action=>"index", :view => "/ccda/index.xml.builder", :format=>:xml,:layout=>false,:id=>146, :template=>"/ccda/index.xml.builder" )
指定:view
和:template
手动解决了我的问题