显示不同用户类型的视图

时间:2016-11-25 15:49:56

标签: ruby-on-rails

我正在计划一个具有用户模型+不同用户子类型(例如学生,教师......)的应用程序,每个用户子模型都有一个专用模型。 我打算直接在rails中对用户级别进行身份验证,没有特定的gem。

我的问题是关于处理用户显示视图文件:

  • 我应该直接在用户的显示文件中显示用户 控制器(在我的视图文件中添加了很多条件,取决于 用户子类型)或
  • 我应该将User show controller操作用作网关 重定向专用于每个子类型的控制器,...然后具有 更简单的展示观点。

2 个答案:

答案 0 :(得分:1)

执行此操作的一种方法是使用partials,然后呈现与用户子类型具有相同名称的partial:

<%# users/show.html.erb %>
<%= render partial: user.user_subtype %>

<%# users/_admin.html.erb %>
<h1>Admin</h1>

<%# users/_student.html.erb %>
<h1>Student</h1>

<%# users/_teacher.html.erb %>
<h1>Teacher</h1>

顺便说一句,如果您正在处理访问级别,我强烈建议您使用Pundit gem。它会为你节省很多麻烦。

答案 1 :(得分:1)

你的观点应该几乎没有那种逻辑。这会打破MVC并降低应用程序的可维护性。您至少应该将其留给控制器,例如:

def show
  render proper_view_by_user
end

private
def proper_view_by_user
   # Define this user_type on your own
   # on devise you'd do something like current_user.class_name
   switch user_type
     when 'Admin' then
       'admins_show' # template found  in your views folder
     when 'NormalUser' then
       'normal_show'
     else
       'normal_show'
   end

end

除非这是一个学习项目,否则请考虑使用设计而不是滚动自己的身份验证系统。阅读this