2012-03-10 19 views
1

私は以下のチュートリアルに続き、完全な完全なアプリケーションを構築しました。エラー「初期化されていない定数登録」ユーザー自己登録とCancan super_admin登録ユーザーのためのDeviseを使用

http://www.tonyamoyal.com/2010/07/28/rails-authentication-with-devise-and-cancan-customizing-devise-controllers/ http://www.tonyamoyal.com/2010/09/29/rails-authentication-with-devise-and-cancan-part-2-restful-resources-for-administrators/comment-page- 2 /#comment-879

私は最後まで問題に遭遇するまで、すべてがうまくいきます。

問題は、super_adminユーザーが新しいユーザーを作成しようとしたときです。

Started POST "/users" for 127.0.0.1 at 2012-03-09 23:37:51 -0500 
    Processing by RegistrationsController#create as HTML 
    Parameters: {"utf8"=>"?", "authenticity_token"=>"c8v6fmCFSlJV2v9qClxD46c1wcBU7n78Mk9xWsJm/Ls=", "user"=>{"email"=>"[email protected]", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "customer_attributes"=>{"first_name"=>"test", "last_name"=>"doe"}, "role_ids"=>["", "3"]}, "commit"=>"Sign up"} 
Completed in 9ms 

NameError(初期化されていない一定の登録)::私は考え出しできること は、ルートの競合である私はエラーを得ました。チュートリアル#1は、新しいユーザを登録するためにdeviseカスタム登録コントローラを使用します。 tut#2は、super_adminによって新しいユーザーを作成する別の方法を追加しました。以下はルートリストです。

cancel_user_registration GET /users/cancel(.:format)    {:action=>"cancel", :controller=>"registrations"} 
     user_registration POST /users(.:format)     {:action=>"create", :controller=>"registrations"} 
    new_user_registration GET /users/register(.:format)   {:action=>"new", :controller=>"registrations"} 
    edit_user_registration GET /users/edit(.:format)    {:action=>"edit", :controller=>"registrations"} 
         PUT /users(.:format)     {:action=>"update", :controller=>"registrations"} 
         DELETE /users(.:format)     {:action=>"destroy", :controller=>"registrations"} 
     user_confirmation POST /users/confirmation(.:format)  {:action=>"create", :controller=>"devise/confirmations"} 
    new_user_confirmation GET /users/confirmation/new(.:format) {:action=>"new", :controller=>"devise/confirmations"} 
         GET /users/confirmation(.:format)  {:action=>"show", :controller=>"devise/confirmations"} 
        users GET /users(.:format)     {:action=>"index", :controller=>"users"} 
         POST /users(.:format)     {:action=>"create", :controller=>"users"} 
       new_user GET /users/new(.:format)    {:action=>"new", :controller=>"users"} 
       edit_user GET /users/:id/edit(.:format)   {:action=>"edit", :controller=>"users"} 
        user GET /users/:id(.:format)    {:action=>"show", :controller=>"users"} 
         PUT /users/:id(.:format)    {:action=>"update", :controller=>"users"} 
         DELETE /users/:id(.:format)    {:action=>"destroy", :controller=>"users"} 

注意:一致するhttp動詞Post/usersとuser_registrationsパスが最初に一致しました。

     POST /users(.:format)     {:action=>"create", :controller=>"users"} 

    user_registration POST /users(.:format)     {:action=>"create", :controller=>"registrations"} 

しかし、この競合を避ける最も良い方法はわかりません。あなたはこれについていくつかの光を当てることができますか?私はあなたのチュートリアルから理解できませんでした。ルートの競合を避けるため、事前に

おかげで、

ジョージ

答えて

0

は、私はインデックス/更新/休息を維持するために管理者の名前空間に管理者がユーザーを追加/削除のコントローラ/ビューを移動することを決定しました。すなわち

    POST /admin/users(.:format)     {:action=>"create", :controller=>"admin/users"} 

    user_registration POST /users(.:format)     {:action=>"create", :controller=>"registrations"} 

名前空間はいくつかのコーディングに不都合がありますが、それは対処しても問題ありません。

1

ルートに競合を避け、任意の「コーディング不便」スコープを使用することができないようにするには:

scope '/admin' do 
    resources :users 
end 

あなたのルートは、このようになります。

    POST /admin/users(.:format)   users#create 
user_registration POST /users(.:format)    users/registrations#create 
関連する問題