2011-01-20 4 views
1

私のRails 3アプリには、私のDevise + OmniAuth統合のための3つのカスタマイズされたコントローラがあります。私はユーザー登録とセッションのために、 'new'のような標準的なメソッドをオーバーライドする必要がありました。 JSONフォーマットと互換性のあるリダイレクトとレスポンスを処理するコントローラメソッドが特に必要でした。Rails 3のカスタマイズされたDeviseコントローラのJSONなどのデフォルトの形式を設定するにはどうすればよいですか?

devise_for :users, :controllers => { 
     :omniauth_callbacks => "users/omniauth_callbacks", 
     :registrations  => "users/registrations", 
     :sessions   => "users/sessions" 
} 

期待通りに動作します:私は、次のしている私のroutes.rbをファイルに

。私はこのようなものだろうリソースのデフォルトフォーマットを設定するには

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イディオムよりははるかに簡潔です。

これを実現するために使用できるルーティングマジックを知っている人はいますか?

答えて

0

答えは必ずしも満足できるものではありませんが、動作します。

devise_scope :user do 
get "sign_up", :to => "users/registrations#new", 
       :defaults => { :format => 'json' } 
end 

そして私は私のカスタムコントローラでこれを試してみました:私はroutes.rbをでこれを試してみました

redirect_to new_user_registration_url, :format => 'json' 

どちらも働きました。私は両方の実装が正しくないと推測しています。

redirect_to new_user_registration_url 

はそれが非常にDRYより私は好きよりも冗長ではないが、それは動作します:もともとどこでも私置き換え

redirect_to :controller => 'users/registrations', 
      :action => 'new', 
      :format => 'json' 

が持っていた:私はようやく私のカスタムコントローラでこれを使用していました。

関連する問題