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異なるパラメーターを持つメソッドを使用して同じコントローラーから取得しようとしましたが、何も機能していないようです

参考までに、レール 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

最後に、ビューファイルを手動で指定する必要があることがわかりました。これは、デフォルトでレールが探して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 に答える