0

アプリには、ゲスト、ユーザー、管理者の 3 つの異なるロールがあります。特定のページは、ページを表示しているロールに基づいて異なるレイアウトにする必要があります。私がやっていることよりも簡単にこれを行う方法があるかどうか疑問に思っていました。

たとえば、現在 3 つの異なるレイアウトがあります。私の VenuesController には、以下の 3 つの異なるアクションがあります。しかし、もっと簡単な方法があるべきだと私には思えます。

def index
  @venues = Venue.paginate(page: params[:page]).order("name ASC")
end

def admin_index
  @venues = Venue.paginate(page: params[:page]).order("name ASC")
  render layout: "admin"
end

def user_index
  @venues = Venue.paginate(page: params[:page]).order("name ASC")
  render layout: "user"
end

1 つのindexアクションを作成して、その中で current_user のロールをテストできると思いますか?

4

2 に答える 2

0

ロールの名前が付けられたレイアウト ファイルを使用しても問題ありません。

def index
  @venues = Venue.paginate(page: params[:page]).order("name ASC")
  # substitute your favorite current_user check and role name method
  render layout: current_user.present? ? current_user.role.name : 'application'
  # app/views/layouts/admin.html.erb
  # app/views/layouts/user.html.erb
  # app/views/layouts/application.html.erb
end

これらのレイアウト間の実際の違い (または違い) に応じて、単一のレイアウト内でヘルパーなどを使用して表示コンテンツを決定する方が簡単で保守しやすい場合があることに注意してください。また、ロール名の付いたパーシャルを使用したり、これらの手法を自分にとって意味のある程度にスライス アンド ダイスしたりすることもできます。

于 2013-09-18T04:15:19.103 に答える