Хорошо, у меня есть кое-что, что работает сейчас.Спасибо @danivovich за то, что отправили меня в нужное место.Первое, что мне нужно было сделать, это отсортировать типы Mime в mime_types.rb, чтобы HTML не был связан с XHTML:
module Mime
remove_const('HTML') # remove this so that we can re-register the types
end
Mime::Type.register "text/html", :html
Mime::Type.register "application/xhtml+xml", :xhtml
Я только что добавил это в свой контроллер приложения:
before_filter :negotiate_xhtml
after_filter :set_content_type
def negotiate_xhtml
@serving_polyglot = false
if params[:format].nil? or request.format == :html
@serving_polyglot = ((not request.accepts.include? :xhtml) or params[:format] == 'html')
request.format = :xhtml
end
end
def set_content_type
if @serving_polyglot
response.content_type = 'text/html'
end
end
Это гарантирует, что XHTML всегда обслуживается как таковой, если только клиент его не принимает или HTML явно не запрашивается.HTML всегда просто XHTML, служил полиглотом.Переменная @serving_polyglot доступна в представлениях, где требуется любое переключение.
Это работает для меня в Chrome, Safari, Firefox, Opera и IE [6-8].