我的应用中有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有什么角色?
答案 0 :(得分: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
请注意,根据这些布局之间的实际差异(或不相关),在单个布局中使用帮助程序来确定可见内容可能更直接和可维护。你也可以使用角色名称的局部片,或者将这些技术中的任何一种切片和切块到任何有意义的程度。
答案 1 :(得分: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