Ruby on rails RubyonRails XML生成
我试图构建一个简单的方法,从RubyonRails中的数据库创建一个XML文件。我觉得我的代码是正确的,但我没有看到XML中的所有用户。 我对RoR完全是个新手 这是我的密码:Ruby on rails RubyonRails XML生成,ruby-on-rails,xml,ruby,file-io,Ruby On Rails,Xml,Ruby,File Io,我试图构建一个简单的方法,从RubyonRails中的数据库创建一个XML文件。我觉得我的代码是正确的,但我没有看到XML中的所有用户。 我对RoR完全是个新手 这是我的密码: 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.
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>
我不明白为什么没有填充所有字段。为什么只有一个数据库实体出现?非常感谢您的帮助。您的代码中有一个bug。在每次迭代中,您使用创建一个元素,然后尝试使用访问该元素。但是当您在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结构有点奇怪。如果您将每个名称/描述对都包装到另一个节点(比如user)中,然后又有许多用户节点,这不是更清楚吗?您的代码中有一个bug。在每次迭代中,您使用创建一个元素,然后尝试使用访问该元素。但是当您在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结构有点奇怪。如果您将每个名称/描述对包装在另一个节点(例如,user)中,然后有许多用户节点,这不是更清楚吗?您应该调查@users.to_xml,看看是否可以使用它,而不是滚动您自己的解决方案。请在中阅读更多关于它的信息。您应该调查@users.to_xml,看看它是否是您可以使用的东西,而不是滚动您自己的解决方案。阅读更多关于它的信息。是的,现在这个没有多大用处,我只是想尝试学习一下。谢谢你的回答!是的,现在这个没有多大用处,我只是在玩,试着去学。谢谢你的回答!