我正在计划一个具有用户模型+不同用户子类型(例如学生,教师......)的应用程序,每个用户子模型都有一个专用模型。 我打算直接在rails中对用户级别进行身份验证,没有特定的gem。
我的问题是关于处理用户显示视图文件:
答案 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。