2012-03-20 22 views
6

Railsアプリケーションで現在のユーザーの表示ビューをルートするにはどうすればよいですか?Railsで現在のユーザーの表示ビューをルートする方法は?

私は

authenticated :user do 
    root :to => "users#show" 
end 

ような何かをしたいが、どのように私はこれに現在のユーザーのIDを渡すのですか?

ありがとうございました

+2

は確かに提案されているものよりもRailsの4+でこれを行うにはセクシーな方法があります。 –

答えて

4

以下は私のために働きました。 routes.rbをで

:users_controller.rbで

root to: 'users#current_user_home' 

def current_user_home 
    redirect_to current_user 
end 
1

いつも「現在の」ユーザーか任意のユーザーですか?

現在のユーザーの場合は、IDを指定せずにすべてを同じページに誘導し、コントローラのアクションで現在のユーザー(セッションなどから)を取得し、ビューに渡します。

+0

こんにちはマイケル、あなたが言っていることを見ていますが、自分の状況が少し複雑なので自分自身を混乱させると思います。あなたが私がこれを考えるのを助けることができるならば、感謝します。 current_userのルートは、現在のユーザーのIDでusers/showにする必要があります。ユーザは自分のショー・ビューだけを見ることができ、誰も誰も見ることができません。この場合、show controllerを '@user = current_user'に変更することができます。しかし、管理者モデルもあり、管理者はすべてのユーザーの表示ビューを見ることができます。これを処理する最善の方法は何ですか?ショーコントローラ、または別のアプローチの条件付きで?あなたの考えをありがとう。 –

0

現在のユーザーのIDは、URLにあってはなりません。セッションに保存する必要があります。だからあなたはそれをルートに通す必要はありません。

編集: あなたのコメントを読んだ後、私はあなたが現在のユーザーのビューを表示するためのprofileのような別のアクションを定義することができると思います。私は、私は、ユーザ固有のルートである必要があり、パスにリダイレクトrequest.path == root_path場合ならば、私はチェックbefore_filterをした

if current_user.is_admin? 
    @user = User.find params[:id] 
else 
    @user = current_user 
end 
+0

ありがとうxdazz、私はあなたが意味することを理解していますが、私はまだ表示ビューを表示するのに問題があります。もう少し詳しくは、MIchaelへの私のコメントを参照してください。何か指摘していただければ幸いです。 –

+0

@AndyHarvey私の編集を参照してください。 – xdazz

+0

ありがとうxdazz、私はあなたの2番目のソリューションを考えていた。しかし私の状況では、現在のユーザーは他のユーザーのプロフィールへのリンクを見ることができます。現在、これらのリンクをクリックすると、認証エラーが発生します。 @ user = current_userを設定すると、他のユーザーへのリンクをクリックすると、現在のユーザープロファイルに根付きます。これは奇妙です。プロフィールのアクションはうまくいくかもしれませんが、もっと簡単な方法があると思っていました。私はそれを試してみましょう。 –

8

:よう

またはあなたのusers/showアクションでは、いくつかのコードを追加します。 routes.rbに設定されたroot_pathは、ユーザーごとのユーザー固有のルートではないため、無限のリダイレクトはありません。 flash.keepを実行して、フラッシュメッセージがリダイレクトから生き残るようにしてください。

EDIT: 読書Q & A及びコメントは、あなたがすでに持っているかを理解しようとしている、とあなたはまだ何をする必要があります。あなたはshowアクションをURLに:idなしでレンダリングするためにルーティングをセットアップするのに成功しましたか?もしそうなら、多分あなたは、あなたのコントローラ内でこのような何かshowアクションが必要になります。

if params[:id].nil? # if there is no user id in params, show current one 
    @user = current_user 
else # if there is the user id in params just use it, 
    # maybe get 'authorization failed' 
    @user = User.find params[:id] 
end 
関連する問題