Я планирую приложение с моделью пользователя + различные подтипы пользователей (например, студенты, учителя и т. Д.) С выделенной моделью для каждого. Я планирую аутентифицироваться на уровне пользователей прямо в рельсах, без какого-либо конкретного драгоценного камня.

Моя проблема связана с обработкой файла представления Users Show:

  • должен ли я показывать пользователей непосредственно в файле Show контроллера User (добавляя множество условий в мой файл представления, в зависимости от подтипа User) или
  • следует ли мне использовать действие User show controller в качестве шлюза, перенаправляющего контроллер, выделенный для каждого подтипа, ... а затем иметь более простой вид представления.
0
Maxence 25 Ноя 2016 в 18:49

2 ответа

Лучший ответ

Ваш взгляд должен быть почти свободен от такой логики. Это нарушит работу 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

Если это не обучающий проект, действительно подумайте об использовании devise, а не об использовании собственной системы аутентификации. Прочтите это.

1
mlabarca 25 Ноя 2016 в 16:04

Один из способов сделать это - использовать партиалы, а затем визуализировать партиал, имя которого совпадает с именем подтипа пользователя:

<%# 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. Это избавит вас от многих головных болей.

1
Ryan Crispin Heneise 25 Ноя 2016 в 15:57