Я использую ActiveResource для использования веб-сервиса REST, предоставленного Redmine (инструмент отслеживания ошибок). Это вебсервис производит XML, как в следующем:Как сделать XML-анализ ActiveResource более последовательным?
<custom_field name="Issue Owner" id="15">Fred Fake</custom_field>
<custom_field name="Needs Printing" id="16">0</custom_field>
<custom_field name="Review Assignee" id="17">Fran Fraud</custom_field>
<custom_field name="Released On" id="20"></custom_field>
<custom_field name="Client Facing" id="21">0</custom_field>
<custom_field name="Type" id="22">Bug</custom_field>
<custom_field name="QA Assignee" id="23"></custom_field>
<custom_field name="Company Name" id="26"></custom_field>
<custom_field name="QA Notes" id="27"></custom_field>
<custom_field name="Failed QA Attempts" id="28">2</custom_field>
Однако, когда ActiveResource разбирает, и я итерацию по результатам их печати, я получаю:
Fred Fake
0
Fran Fraud
#<Redmine::Issue::CustomFields::CustomField:0x5704e95d>
0
Bug
#<Redmine::Issue::CustomFields::CustomField:0x32fd963>
#<Redmine::Issue::CustomFields::CustomField:0x3a68f437>
#<Redmine::Issue::CustomFields::CustomField:0x407964d6>
2
Правильно, он выбрасывает все информацию атрибута из чего-либо со значением, но сохраняет информацию об атрибуте из пустых элементов.
Излишне говорить, что это затрудняет задачу, когда вы пытаетесь найти значение для id 15 (или что-то еще). Теперь я могу ссылаться на вещи по их положению, но это очень хрупкое, потому что эти элементы, вероятно, изменятся в будущем. Я предполагаю, что должен быть какой-то способ заставить ActiveResource сохранять информацию об атрибутах, но так как я не делаю ничего особенного.
(Мое расширение ActiveResource составляет всего пять строк: оно расширяет ActiveResource, определяет URL-адрес, имя пользователя и пароль службы, и все).
Итак, кто-нибудь знает, как я могу заставить ActiveResource не анализировать этот XML так странно?
было бы здорово, если бы вы могли опубликовать кусок кода, который выполняет печать и разбор. – karlcow
С тех пор я удалил его, но в основном это были проблемы = Redmine :: Issue.find (: all); проблемы [0] .custom_fields.each do | field | ставит поле; конец – machineghost