2011-02-07 11 views
0

私は、Ruby/Rails3アプリケーションにログインした後、ユーザーのロールに基づいて特定のURLにユーザーをリダイレクトする方法を理解しようとしています。HowToは、レール3の役割に基づいてユーザーをリダイレクトしますか?

これまで認証用にauthlogic gemを使用していましたが、ロール設定にcancan gemを使用しました。

class User < ActiveRecord::Base 
    acts_as_authentic 
    ROLES = %w[admin customer demo] 
end 

今すぐログインの世話をしているアプリ/コントローラ/ user_session_controller.rbがある:

役割は、ちょうどこの(アプリ/モデル/ user.rbで定義されている)のようなものです。特定のURLにユーザーをリダイレクトする方法を単純またはエレガントな方法はあり

"undefined method `role' for #<Class:0xb5bb6e88>" 

:これは次のエラーのために動作していない

for r in User.role 
     if r == "admin" 
     redirect_to admins_url 
     else 
     redirect_to users_url 
     end 
end 

: 私はこのような何かをしたいと思い彼らの役割に?

(ロールは、ユーザーテーブルのMySQLの列 'ロール' で定義されている。)

答えて

1

for r in User.role混乱あります。クラスで定義されたROLESの配列にアクセスしようとしていますか、現在のユーザーのロールの値にアクセスしようとしていますか?

ROLESの配列にアクセスする場合は、User::ROLESを使用してください。

authlogicを使用すると、通常はapplication_controllerのcurrent_userが定義されます。だから、現在のユーザーの役割は、だからあなたのコードは、あなたは間違いなくCanCanをチェックアウトする必要があります

if current_user.role == "admin" 
    redirect_to admins_url 
    else 
    redirect_to users_url 
    end 
+0

@ steve-wilhelmこれは良い点です。現在のユーザーの役割の値にアクセスしようとしています。しかし、このメソッドを使用するとエラーが発生します。未定義のメソッド 'role 'for nil:NilClass – user607225

+0

あなたのユーザーテーブルの移行にロールを追加し、rake db:migrateを実行しましたか? –

+0

ofcourse、mysqlの役割は適切なデータで埋められています。例えばテーブル:ユーザー、列:値で満たされたロール: "admin" – user607225

1

のようになりますcurrent_user.role

を使用して見つけることができます。これは、ユーザーの役割と能力を管理するかなり論理的な方法です。

関連する問題