Генерация Ruby on Rails XML - PullRequest
       9

Генерация Ruby on Rails XML

1 голос
/ 02 ноября 2008

Я пытаюсь создать простой метод, который создает файл XML из базы данных в ruby ​​on rails. Я чувствую, что мой код правильный, но я не вижу всех пользователей в 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>

Не понимаю, почему не заполнены все поля. Почему появляется только одна из баз данных? Я действительно ценю помощь.

Ответы [ 2 ]

4 голосов
/ 03 ноября 2008

Вы должны исследовать @users.to_xml, чтобы увидеть, можете ли вы использовать это вместо того, чтобы использовать собственное решение. Подробнее об этом читайте в документации Rails API .

2 голосов
/ 02 ноября 2008

В вашем коде есть ошибка. На каждой итерации вы создаете элемент с 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 ), а затем имели бы множество user узлов?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...