Мои клиенты отправляют запросы на мои приложения rails в формате XML или HTML.Под rails 2.10 у моего действия контроллера был блок responseds_to с want.html и want.xml.Мои клиенты установили свои заголовки HTTP для Content-Type = text / xml и Accept = text / xml, если они хотели XML и в значительной степени оставили заголовки для HTML.Отлично сработало.
Оказывается, что большое количество моих клиентов все время пропускали заголовок Accept = text / xml, но блок response_to запускал want.xml, если они установили Content-type = text / xml.На rails3 блок response_to (правильно) запускает файл want.xml, только если установлен Accept = text / xml.
Вместо того, чтобы многие мои клиенты меняли свои программы, как я могу сказать rails3, что для запроса требуется XML?Я думаю, что если я увижу Content-Type, установленный на text / xml, я заставлю Accept также быть text / xml.
Я попытался изменить хеш request.env напрямую так:
class MyController < ApplicationController
def my_xml_or_html_action
if request.env['CONTENT_TYPE'].to_s.match(/xml/i)
request.env['HTTP_ACCEPT'] = 'text/xml'
end
respond_to do |wants|
wants.html { redirect_to html_response }
wants.xml { render xml_response }
end
end
но это не сработало.Я мог бы полностью отказаться от response_to и сделать что-то вроде:
class MyController < ApplicationController
def my_xml_or_html_action
if request.env['CONTENT_TYPE'].to_s.match(/xml/i)
redirect_to html_response
else
render xml_response
end
end
, но это кажется грубой силой.Есть ли более грубый способ сделать это?