2008-11-02 139 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中瞭解更多關於它的信息。