0

Rails アプリの /index パスは、ログインしているユーザーには 1 つのページを表示し、管理者ユーザーにはまったく別のページを表示し、ログインしていないユーザーにはまったく別のページを表示する必要があります。

したがって、1 つのコントローラー (HomeController)、1 つのアクション (インデックス)、3 つのビューです。

これを 2 つの方法で実装できます。

  1. 正しいことをするようにif句を挿入します。views/home/index.html.erb
  2. http://guides.rubyonrails.org/layouts_and_rendering.htmlの2.2.12 Finding Layoutsで説明されているように、何らかの方法で条件付きロジックをコントローラーに入れ (コントローラーにユーザーが誰であるかを見つけさせる)、それに応じて別のレイアウトをレンダリングします。

私は後者の解決策が正しいと強く感じています。しかし、ユーザーコントローラーがまったく異なるコントローラーであるため、それを実装する方法がわかりません。ホームコントローラーは、どのビューをレンダリングするかを決定するために現在のユーザーが誰であるかをどのように見つけることができますか?

4

1 に答える 1

1

ユーザーがログインしているかどうかを確認するために、すべてのコントローラーで current_user オブジェクトにアクセスできます。また、 current_user オブジェクトからユーザー ロールを取得することもできます。

current_user.role_name

このロール名を渡して、パーシャルをファイル名としてレンダリングすることができます (Keep different files)。

于 2012-12-20T17:02:24.127 に答える