2009-07-02 83 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。 – 2012-01-06 04:35:24

回答

6

如果你想寫使用Rails的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 2009-07-02 21:17:11

1

在您的控制器中,您需要將內容呈現爲xml。喜歡的東西:

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

該功能應該放在哪裏?我可以從格式塊內將params傳入該函數嗎? – holaSenor 2012-03-07 16:31:46

2

我目前正在做你想要的,沒有問題。 ERB生成XML當然是最方便的方法之一,特別是如果輸出主要是XML模板。它也可以做一些整潔的技巧,比如渲染帶有集合的部分。

但我知道這並沒有用於正常工作(不得不使用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> 

注意:交錯<費用AC >和<現金流>在您的示例中可能表明存在潛伏的另一個問題XML生成邏輯。