#ruby-on-rails #xml #rabl
#ruby-on-rails #xml #rabl
Вопрос:
Как мне принудительно вывести XML с помощью RABL? По умолчанию отображается JSON, который отлично работает. Когда я захожу на свою страницу с
curl -H "Accept: application/xml" -X GET (myurl)
RABL отображает XML так, как ожидалось. Однако, когда я обращаюсь к тому же URL с помощью браузера, ответ в формате JSON. Я попытался настроить
ActionView::Template::Handlers::Rabl.default_format = Mime::XML
а также
render "index.rabl", :content_type => 'application/xml'
В этом случае rails возвращает application / xml в качестве типа содержимого, но все равно возвращает JSON.
Как я могу отобразить XML-представление моих данных без отправки application/xml
в качестве единственного заголовка accept?
Ответ №1:
Попробуйте добавить формат по умолчанию в свой маршрут:
get 'your/url/matcher' => 'controller#method', :defaults => { :format => :xml }
Ответ №2:
На какой версии Rails вы работаете? Я почти уверен, что если вы сделаете это, например:
respond_to do |format|
format.xml # renders rabl as xml
format.json # render rabl as json
end
Но это в Rails 2. Я уверен, что есть эквивалент для 3.
Комментарии:
1. Я на Rails 3. Хм, добавление этого блока странным образом отображает пустую страницу. Я получаю XML (даже без блока), когда добавляю
.xml
к своему URL, но было бы неплохо, чтобы он работал без этого.2. Да, это вряд ли будет работать на Rails 3. Рассматривали ли вы возможность добавления простого фильтра before, который устанавливает тип содержимого в XML для этого действия?