0

如何在同一控制器中将视图/控制器的 xml 输出作为字符串获取

这是路由文件

路线.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

我将使用 urllocalhost/ccda/147.xml来查看/生成用户结果为 xml

现在我希望将该 url 的输出作为字符串而不返回到浏览器

我尝试使用render_to_string具有不同参数的方法从同一个控制器中获取它,但似乎没有任何效果

仅供参考:我正在使用 rails 2.3.12 和Builder::XmlMarkup API

4

3 回答 3

0

下面这个怎么样?

render_to_string :controller => 'ccda_controller', :action => 'index', :id => 147, :format => :xml
于 2013-08-03T19:16:19.563 回答
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手动解决了我的问题

于 2013-08-05T08:36:04.427 回答
0

如何使用以下调用(在控制器内部,已从您的问题中获取已知选项):

render_to_string(:template => 'ccda/index.xml.builder', :layout => false, :id => 147)

由于文档,这将适用于 Rails 版本 2.3.8,所以我不知道它是否在您正在使用的 Rails 2.3.12 中可用。

PS:升级到至少最新版本的 Rails 3 怎么样?我没有更改来测试我的解决方案,因此或多或少是猜测。

于 2013-08-03T11:04:16.603 回答