Rails如何将url的输出作为字符串输出

时间:2013-08-03 10:41:08

标签: ruby-on-rails routes

如何在同一个控制器中将视图/控制器的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

3 个答案:

答案 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手动解决了我的问题