Нужен ли мне контроллер «Пользователи» при использовании Devise in Rails

17

Я новичок Rails. Я работаю над небольшим проектом Rails4, пытающимся улучшить свои навыки. Я свободно следую учебному пособию M.Hartl .

В соответствии с учебным пособием создается пользовательская аутентификация пользователя. Однако я хотел бы использовать Devise для аутентификации пользователей. Должен ли я иметь контроллер пользователя, как в учебнике? В каких случаях я должен использовать / не использовать контроллер Users, когда уже использую Devise?

Что касается учебника, я просто пропущу часть, генерирующую контроллер, или мне нужно сопоставить действия с Devise?

    
задан imarg 05.04.2014 в 11:45
источник
  • Если вы хотите выполнить некоторую настройку, вы должны создать пользовательский контроллер. Потому что это соответствует вашим требованиям? Первое, что вы должны знать, почему мы создаем новый контроллер? –  Sourabh Upadhyay 05.04.2014 в 12:39
  • stackoverflow.com/questions/21904701/... –  Gopal S Rathore 05.04.2014 в 12:44
  • Я наткнулся на этот старый вопрос, и я подумал, что я связываюсь с сообщением в блоге, которое помогло мне понять несколько вещей лучше. Здесь korenlc.com/rails-tutorial-authentication-with-devise –  imarg 04.06.2016 в 23:05

1 ответ

39

Вам нужен только пользовательский контроллер, если вы хотите управлять пользователями отдельно от обычного процесса регистрации / обновления. У меня есть пользовательский контроллер, так что администраторы могут управлять (создавать, редактировать, обновлять, удалять) пользователей независимо от обычного процесса регистрации / обновления.

Конфликт с разработкой, вероятно, потому, что у вас есть devise_for :users … в вашем файле маршрутов, чтобы настроить его, а также resources :users для вашего UserController. Это означает, что разработчик и ваш UserController будут пытаться использовать некоторые из тех же /users маршрутов. Вам нужно разделить их, изменив путь, на который сопоставляется один из них. Вы можете либо добавить, например, :path => 'u' к вашему devise_for , чтобы отобразить маршруты, сопоставленные с /u , и не будут конфликтовать с вашим UserController на /users . В качестве альтернативы вы можете оставить devise_for отдельно (поэтому все еще используете /users ) и вместо этого изменить свою маршрутизацию UserController, например, resources :users_admin, :controller => 'users' , которая будет перемещать маршруты UsersControllers для сопоставления на /users_admin . Обратите внимание, что это изменит помощники пути, например, от users_path до users_admin_path .

UPDATE

Следуя вашим комментариям / изменениям, я быстро просмотрел учебное пособие, и я думаю, что разработка в основном дает вам эквивалентную функциональность пользовательской функции, которая разработана в разделе 5.4 до раздела 9.1 или 9.2. (плюс некоторые дополнительные вещи, например, подтверждение по электронной почте, сброс пароля, блокировка учетной записи и т. д.). Однако это не означает, что это замена для этой функциональности, если вы хотите попробовать и объединить Devise с этим учебником. Есть некоторые вещи, которые выглядят так, как будто они будут работать (например, Devise также определяет метод current_user ), но маршруты и т. Д. Были бы разными, и разрабатывать расщепление вещей на большее количество контроллеров (отдельные контроллеры для регистрации, входа / выхода, восстановление пароля…). Функциональность админ-типа (как в разделах 2.2, 9.3, 9.4 - создание / редактирование / удаление / список других ) - это то, что я добавил в моем приложении отдельный UserController. Devise не определяет UserController, но использует маршруты users , если вы делаете devise_for :users без пути, как я упоминал выше.

Итак, более конкретно:

  1. Вам понадобится только UserController, если вы хотите включить функции администратора, позволяющие просматривать / редактировать / удалять всех пользователей.
  2. Если вы хотите использовать урок в учебнике, ему, вероятно, потребуется какая-то работа, чтобы массировать вещи, чтобы соответствовать, меняя вспомогательные ссылки на страницах и т. д. Извините, я не более конкретный; Я не сделал этого урока.

Вам не хватало бы дополнительного понимания, которое исходит от выполнения всего этого вручную, но разработка - популярный движок, так что хорошо знать. Если у вас есть время, вы можете сделать учебник полностью, а затем снова с помощью! Это поможет вам понять, что некоторые из подобных вещей делают за кулисами. P.S: Можно поучительно посмотреть на исходный код разработки, даже если вы не сразу все поняли.

    
ответ дан Tim 20.04.2014 в 23:52
  • Спасибо за ваш ответ. Это помогло мне понять кое-что, но мне это не очень помогает (из-за вашей вины). Теперь я понимаю, что мой вопрос был очень расплывчатым, и я не придавал ему достаточного контекста, поэтому я его отредактировал. Может, вы еще раз взглянете? –  imarg 10.06.2014 в 20:08
  • thanks @Tim - так что я хочу только изменить параметры в контроллере разработки - любая идея, как по-настоящему создавать контроллер разработки, не изобретая колесо? –  BKSpurgeon 05.07.2016 в 06:52
  • Вы можете создавать контроллеры устройств, используя «rails generate devise: пользователи контроллеров», но это не очень помогает. Для полностью пользовательского администратора пользователя лучше создать новый контроллер. Я бы предложил назвать его по-разному, как AppUsersController, а не UserController, и использовать накладную маршрутизацию по умолчанию, доступную в rails. –  Rishinder 13.05.2018 в 09:12