2008-11-02 159 views
1

我试图构建一个简单的方法,它可以在rails上从数据库中创建一个XML文件。我觉得我的代码是正确的,但我没有看到XML中的所有用户。
我是一个完整的RoR新手。Ruby on Rails XML生成

这里是我的代码:

def create_file  
    @users = User.find(:all) 
    file = File.new('dir.xml','w') 
    doc = Document.new 

    make = Element.new "make" 
    @users.each do |y| 
    make.add_element "name" 
    make.elements["name"].text = y.name 
    make.add_element "description" 
    make.elements["description"].text = y.description 
    end  

    doc.add_element make 

    file.puts doc 
    file.close 
end 

我的XML输出:

<make> 
<name>sammy</name><description>samsdescription</description> 
<name/><description/> 
<name/><description/> 
<name/><description/> 
<name/><description/> 
<name/><description/> 
<name/><description/> 
<name/><description/> 
<name/><description/> 
<name/><description/> 
<name/><description/> 
<name/><description/> 
<name/><description/> 
</make> 

我不明白为什么不填充所有的字段。为什么只是其中一个数据库实例显示出来?我非常感谢帮助。

回答

2

代码中存在一个错误。在每次迭代中,您都会创建一个元素add_element,然后尝试使用Elements#[]访问该元素。但是当您在Elements#[]中使用节点名称时,它仅返回第一个匹配节点。所以你在每次迭代中创建一个节点,但只更新第一个节点。尝试将代码更改为以下内容:

@users.each do |y| 
    name_node = make.add_element "name" 
    name_node.text = y.name 
    desc_node = make.add_element "description" 
    desc_node.text = y.description 
end 

顺便说一句,您的XML结构有点奇怪。如果将每个名称/描述对包装在另一个节点(例如,用户)中,然后是否有许多用户节点,是不是更清楚?

+0

是的,现在没有太多的用处,我只是玩耍,尝试和学习它。非常感谢答案! – user33344 2008-11-02 18:37:08

4

您应该调查@users.to_xml以查看它是否可以使用,而不是滚动您自己的解决方案。在Rails API docs中了解更多关于它的信息。