Рефакторинг и разъединение контроллеров Rails: могут ли они называть друг друга? - PullRequest
0 голосов
/ 08 марта 2011

У меня есть следующая ситуация в приложении Ruby on Rails:

  • пользователь заполняет форму (комментарий), получает страницу со всевозможным кодом, где он может выбрать метод аутентификации (openId,Twitter, Facebook и т. П.).
  • заполняется omniauth, при успешном возвращении пользователь получает сеанс и обрабатывает данные начальной формы (комментарий опубликован).

Iвсе работает, за исключением того, что моя логика распространена, как я считаю, безобразно;SessionsController теперь создает комментарий об успешной аутентификации.

Какой хороший способ отделить подобные вещи?Должен ли модуль Comment подключаться (слушать) к SessionsController?Или SessionsController должен просто вызвать некоторые методы класса CommentsController или Comment, чтобы сохранить комментарий об успешной аутентификации?Есть ли какие-то шаблоны, с которыми я могу ознакомиться, которые решают подобные проблемы?

1 Ответ

0 голосов
/ 08 марта 2011

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

  1. Неаутентифицированный пользователь ПОСТАВЛЯЕТСЯ в / comments / create
  2. A перед фильтром, проверяет аутентификацию и сохраняет хэш параметров комментария и местоположение перенаправления успехазатем сеанс перенаправляет на / session / new
  3. После успешной аутентификации контроллер сеанса проверяет хэш параметров и создает любые отложенные модели перед перенаправлением на сохраненный путь.

Что было бы здоровоесли вы могли бы выполнить POST из другого запроса, но, к сожалению, вы не можете, поэтому вам нужно поместить логику в контроллер сеанса.

...