Rails: рендеринг XML добавляет тег <hash>
У меня есть контроллер Rails, который выводит хэш в формате XML - например:
class MyController < ApplicationController
# GET /example.xml
def index
@output = {"a" => "b"}
respond_to do |format|
format.xml {render :xml => @output}
end
end
end
Однако Rails добавляет <hash> тег, который я не хочу, т.е.:
<hash>
<a>
b
</a>
</hash>
Как я могу просто вывести это вместо?
<a>
b
</a>
Ответы
Ответ 1
Я думаю, что если вы конвертируете объект в XML, вам нужен тег, который обертывает все, но вы можете настроить имя тега для обертки:
def index
@output = {"a" => "b"}
respond_to do |format|
format.xml {render :xml => @output.to_xml(:root => 'output')}
end
end
Это приведет к:
<output>
<a>
b
</a>
</output>
Ответ 2
У меня была такая же проблема;
Это мой XML:
<?xml version="1.0" encoding="UTF-8"?>
<Contacts>
<Contact type="array">
</Contact>
</Contacts>
Я использовал это:
entries.to_xml
для преобразования хэш-данных в XML, но это переносит данные записей в <hash></hash>
Итак, я изменил:
entries.to_xml(root: "Contacts")
но это все еще завернуло преобразованный XML в "Контакты". меняя свой XML-код на
<Contacts>
<Contacts>
<Contact type="array">
<Contact>
<Name></Name>
<Email></Email>
<Phone></Phone>
</Contact>
</Contact>
</Contacts>
</Contacts>
Таким образом, он добавляет лишний ROOT, который я там не там.
Теперь решение для меня помогло:
entries["Contacts"].to_xml(root: "Contacts")
что позволяет избежать <hash></hash>
или любого дополнительного корня, который должен быть включен.
Ура!!