Приложение My Rails 3 имеет три настраиваемых контроллера для интеграции с Devise + OmniAuth. Мне нужно было переопределить стандартные методы, такие как «новый», для регистрации пользователей и сессий. Мне особенно нужны были методы контроллера для обработки перенаправлений и ответов, которые совместимы с форматированием JSON.
В моем файле rout.rb есть следующее:
devise_for :users, :controllers => {
:omniauth_callbacks => "users/omniauth_callbacks",
:registrations => "users/registrations",
:sessions => "users/sessions"
}
Это работает, как ожидалось. Мои маршруты теперь показывают маршруты пользовательских контроллеров, такие как:
new_user_session GET /users/sign_in(.:format) {
:action =>"new",
:controller =>"users/sessions"
}
new_user_registration GET /users/sign_up(.:format) {
:action=>"new",
:controller=>"users/registrations"
}
Чтобы установить формат по умолчанию для ресурса, я бы сделал что-то вроде этого:
resources :users, :defaults => {
:format => 'json'
}
Итак, я попробовал это:
namespace "users" do
resources :registrations, :defaults => {
:format => 'json' }
resources :sessions, :defaults => {
:format => 'json' }
end
Что не сработало, как ожидалось. Я закончил с этими маршрутами:
new_users_registration GET /users/registrations/new(.:format) {
:format=>"json",
:action=>"new",
:controller=>"users/registrations"
}
new_users_session GET /users/sessions/new(.:format) {
:format=>"json",
:action=>"new",
:controller=>"users/sessions"
}
Чтобы это работало с моими пользовательскими переопределениями в Devise, мне нужно отформатировать «new_user_registration», а не «new_users_registration».
Я проверил метод devise_for, и у него нет опции: defaults. Я могу использовать метод devise_scope для установки отдельных маршрутов, но это выглядит гораздо менее лаконично, чем идиома: defaults.
Кто-нибудь знает какую-либо магию маршрутизации, которую я могу использовать, чтобы это произошло?