我创建了一个具有动作的控制器:
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
Run Code Online (Sandbox Code Playgroud)
如何在Book模型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>
Run Code Online (Sandbox Code Playgroud)
其中只有1个Owner元素和许多Book元素
我只能输出Book元素,但不能在同一级别的Books中输出一个Owner.请帮忙!!!
您应该使用Rails XML Builder构建它,但要小心命名约定.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
Run Code Online (Sandbox Code Playgroud)
现在,您可以@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
Run Code Online (Sandbox Code Playgroud)
您可以修改此构建器以使XML看起来像您喜欢的那样.