Я пытаюсь создать простой метод, который создает 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>
Я не понимаю, почему не заполнены все поля. Почему отображается только один из элементов базы данных? Я очень ценю помощь.





В вашем коде есть ошибка. На каждой итерации вы создаете элемент с 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 немного странная. Разве не было бы более ясным, если бы вы обернули каждую пару имя / описание внутри другого узла (скажем, Пользователь), а затем получили бы много узлов Пользователь?
Вам следует изучить @users.to_xml, чтобы увидеть, можно ли его использовать вместо того, чтобы использовать собственное решение. Подробнее об этом читайте в Документация по Rails API.
Да, сейчас в этом нет особого смысла, я просто играю, пытаясь изучить это. Большое спасибо за ответ!