我的Rails 3應用程序爲我的Devise + OmniAuth集成提供了三個自定義控制器。我需要覆蓋用戶註冊和會話的標準方法,比如'new'。我特別需要控制器方法來處理與JSON格式兼容的重定向和響應。如何爲Rails 3中的自定義Devise控制器設置默認格式,如JSON?
在我的routes.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"
}
爲了這個與設計我自定義的替換工作,我需要格式化「new_user_registration」而不是「new_users_registration」。
我檢查了'devise_for'方法,它沒有:defaults選項。我可以使用'devise_scope'方法來設置單個路由,但這似乎不太簡潔:defaults慣用語。
有誰知道我可以用來實現這種情況的任何路由魔法?