2009-07-02 23 views
4

私は、XML列を出力する機能を持っている:Railsを使用して動的XMLページを生成するにはどうすればよいですか?

<expensesAC> 
    <cashflow> 
    <month>6</month> 
    <cash>300</cash> 
    <projected>null</projected> 
    </cashflow> 
    <cashflow> 
    <month>6</month> 
    <cash>300</cash> 
    <projected>null</projected> 
    </cashflow> 
    <cashflow> 
    <month>6</month> 
    <cash>300</cash> 
    <projected>null</projected> 
    </cashflow> 
</expensesAC> 

私はgenxml.xml.erbというビュー、およびmysite.com:3000/genxml.xmlへのリダイレクトを持っています。

flexにはXMLファイルを渡す必要があるため、これが必要です。しかし、私が得るものは:

<body> 
<expensesAC> 
    <cashflow> 
    <month>6</month> 
    <cash>300</cash> 
    <projected>null</projected> 
    </cashflow> 
</expensesAC> 
    <cashflow> 
    <month>6</month> 
    <cash>300</cash> 
    <projected>null</projected> 
    </cashflow> 
    <cashflow> 
    <month>6</month> 
    <cash>300</cash> 
    <projected>null</projected> 
    </cashflow> 
</body> 

したがって、基本的に、Railsは自分のXML文字列をHTMLに強制します。

文字列を使用して動的XMLページを生成するにはどうすればよいですか?または、XML文字列を動的に生成されるXMLページに変換するにはどうすればよいですか?静的ファイルを作成したくない場合、XMLセットのデータは各ユーザーの個人情報になるため、これらのファイルは即座に生成する必要があります。

+1

これはHTMLではありません。ルートは ''のXMLです。 –

答えて

6

あなたがレールにXMLファイルを作成したい場合、あなたはおそらくERBからBuilder template handlerに切り替えることもできます:ような何か。

ActiveRecordオブジェクトを使用している場合は、レンダリングオプションを指定するときに便利な:xmlオプションを使用することもできます。

def index 
    @records = Model.all 
    respond_to do |format| 
    format.html 
    format.xml { render :xml => @records } 
    end 
end 
+1

@wepposは 'genxml.xml.erb'の名前を' genxml.xml.builder'ま​​たは 'genxml.xml.rxml' – Scott

+0

wepposに変更することを指摘しているので、あなたは私にそれを打ち負かしました、それは私が与えただろうアンカーです – marcgg

+1

しかし、ERB(またはHAML、またはあなたが好むその他のテンプレートエンジン)を使用してXMLを生成することには何も問題ありません。 –

1

コントローラでは、コンテンツをxmlとしてレンダリングする必要があります。

def show 
    respond_to do |format| 
    format.html 
    format.xml { render :xml => my_function_that_outputs_xml } 
    end 
end 
+0

その場所はどこに置かれるべきですか?フォーマットブロック内からその関数にパラメータを渡すことはできますか? – holaSenor

2

私は現在、あなたが問題なくしたいものを正確にやっています。 XMLのERB生成は、特に出力が主にXMLテンプレートである場合は、確かに最も便利な方法の1つです。また、コレクションを使って部分的な部分をレンダリングするようなきちんとしたやり方も可能です。

しかし、私はこれが正しく動作するために使用されていなかったことを知っています(buildersを使用しなければならなかった)。しかし、少なくともRails 2.3.5以降ではERBのアプローチがうまくいくようです。

class MyController < ApplicationController 
    def genxml 
    respond_to do |format| 
     format.xml 
    end 
    end 
end 

はその後genxml.xml.erb有効なXMLファイルを作成し、あなたも同じようなトリックを行うことができます。

<expensesAC> 
<%= render :partial => 'expenses/cashflow', :collection => @expenses-%> 
</expensesAC> 

費/ _cashflow.xml.erbがある場合は、何かのように:

<cashflow> 
    <month><%= cashflow.month %></month> 
    <cash><%= cashflow.cash %></cash> 
    <projected><%= cashflow.projected %></projected> 
</cashflow> 

NB:インターリーブされた<費用AC >および<キャッシュフロー>は、あなたの中に潜んでいる別の問題があることを示している可能性があります。 XML生成ロジック。

関連する問題