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

我想我可以有一个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 回答
0

用这个:

class HomeController < ApplicationController
  before_action :get_women_category, :get_men_category

布局:resolve_layout

  def index
  end

  private

  def resolve_layout
    if current_user && current_user.has_role?(:super_admin)
       'superadmin'
    elsif current_user && current_user.has_role?(:company_admin)
       'application'
    else
      'application'
    end
  end

end
于 2018-12-31T05:27:54.697 回答