Я нашел часть ответа на следующей вики-странице: https://github.com/plataformatec/devise/wiki/How-To:-Make-Devise-work-with-other-formats-like-mobile,-iphone-and-ipad-(Rails-specific)
Итак - в итоге (помимо регистрации типа MIME и т. Д., Как описано в вопросе):
В файле config / initializers / devise.rb раскомментируйте строку config.navigational_formats и замените на:
config.navigational_formats = [:"*/*", "*/*", :html, :test]
Добавьте файл в инициализаторы и добавьте в него следующее:
ActionController::Responder.class_eval do
alias :to_test :to_html
end
Мне также нужно было переопределить метод devise, потому что мой тип mime на самом деле тоже отвечает на html - но я хочу посмотреть, отвечает ли он и на: test. Итак, снова в папке инициализаторов, добавьте файл, который содержит следующее:
module Devise
module Controllers
# Helpers used in both FailureApp and Devise controllers.
module SharedHelpers
protected
# Helper used by FailureApp and Devise controllers to retrieve proper formats.
def request_format
@request_format ||= if request.format.test?
:test
elsif request.format.respond_to?(:ref)
request.format.ref
elsif MIME_REFERENCES
request.format
elsif request.format # Rails < 3.0.4
request.format.to_sym
end
end
end
end
end
Возможно, что было бы чище - вместо переопределения вышеуказанного метода - переопределить метод в Warden , который выполняет перенаправление на неавторизованный URL - но я не мог понять это и также неясно, является ли Devise (upstream) лучшим местом для переопределения методов.