2010-06-09 45 views
1

我創建了一個有作用的控制器:生成XML

def gen_books_xml 
    @books = Book.find(:all, :conditions => {:owner_id => 1}) 
    respond_to do |format| 
    format.xml { render :xml => @books.to_xml(:root => "Books", :skip_types=>true) } 
    end 
end 

我怎麼能實現它可以生成以下格式的圖書模式SA的to_xml方法?

<?xml version="1.0" encoding="UTF-8"?> 
<Books> 
    <Owner>1</Owner> 
    <Book><title>some title</title></Book> 
    <Book><title>some title</title></Book> 
    <Book><title>some title</title></Book> 
    ... 
</Books> 

僅存在1業主元件和許多Book元素

我只能輸出書元素,但不能輸出一個所有者在書籍的相同的水平。請幫忙!!!

回答

6

你應該使用Rails XML構建器構建它,但要小心的命名約定。 PS,這些例子沒有經過測試,可能會有一些錯誤,根據您自己的判斷使用。更改您的控制器像這樣:

def gen_books_xml 
    @owner_id = 1 
    @books = Book.find(:all, :conditions => {:owner_id => @owner_id}) 
    respond_to do |format| 
    format.xml 
    end 
end 

現在,你有@owner_id@books訪問從你的觀點。然後在views/controller_name/gen_books_xml.xml.builder創建構建器文件:

xml.instruct!    # for the <?xml version="1.0" encoding="UTF-8"?> line 
xml.books do    # xml.foo creates foo element 
    xml.owner @owner_id  # you're inside a block so xml.bar will create <foo><bar/></foo> elements 
    @books.each do |book| 
    xml.book do 
     xml.title book.title 
    end 
    end 
end 

您可以修改此建設者,使但是你喜歡的XML看看。

0

沒有解決辦法,但黑客

@books.to_xml(...).sub("<Books>","<Books><Owner>1</Owner>") 
+0

謝謝你的回覆如此之快!它似乎生成了正確的文檔,但也出現以下錯誤消息:此頁面包含以下錯誤消息:第1行第3行上的錯誤:文檔結尾處的額外內容下面是頁面渲染到第一個錯誤。 – PeterWong 2010-06-09 07:36:36

+0

對不起!我有這個問題。我使用而不是 。問題已經解決,雖然是黑客,謝謝! – PeterWong 2010-06-09 07:50:03

+0

你可以發佈生成的整個XML文檔嗎? – 2010-06-09 07:50:32