2009-07-02 53 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生成逻辑。