1

ruby on rails でデータベースから 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.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>

すべてのフィールドにデータが入力されていない理由がわかりません。データベース全体の 1 つだけが表示されるのはなぜですか? 本当に助かります。

4

2 に答える 2

4

@users.to_xml独自のソリューションを展開する代わりに、それが使用できるものであるかどうかを調査する必要があります。詳細については、RailsAPIのドキュメントをご覧ください。

于 2008-11-03T02:09:48.357 に答える
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 構造は少し変わっています。すべての名前/説明のペアを別のノード (たとえば、 user )内にラップしてから、多くのユーザーノードを作成すると、より明確になると思いませんか?

于 2008-11-02T18:33:41.427 に答える