Как перенаправить на экран входа в систему, ТОГДА выполнить действие ресурса в Ruby on Rails?

В моем приложении rails 2 у меня есть страница с фотовыставкой. На этой странице фотошоу есть текстовое поле, в котором посетители могут оставлять комментарии к фотографии.

Если пользователь, который не вошел в систему, вводит комментарий и нажимает «Отправить», я хочу, чтобы появилось наложение входа/регистрации (также известное как модальное). Как только они войдут в систему или зарегистрируются (через нашу собственную авторизацию или соединение FB), я хочу, чтобы модальное окно исчезло, а комментарий был отправлен.

Мой вопрос: как мне справиться с этим, сохраняя код DRY, CRUD и придерживаясь MVC?

Некоторые варианты, которые я рассматривал:

  1. Передайте текст комментария как скрытое поле в форме входа/регистрации. Сохраните комментарий в сеансе/новом действии. Это не CRUD, а также не работает, если кто-то входит в систему через Facebook.
  2. Сохраните текст комментария как переменную сеанса, затем после входа в систему, когда страница перезагрузится, определите переменную сеанса в действии фото/шоу и сохраните комментарий. Это не КРУД.
  3. Сделайте то же самое, что и выше, но определите переменную сеанса в представлении и сохраните комментарий. Это ломает MVC.
  4. Полностью обработайте вход/регистрацию через AJAX, определите успешный ответ, а затем сделайте вызов, чтобы сохранить комментарий. Это ломает MVC.

Имейте в виду, что такое поведение, когда пользователю предлагается войти в систему после отправки комментария, будет происходить по всему сайту на многих различных типах ресурсов (не только на фотографиях), поэтому СУХОЕ решение важно, если это вообще возможно.


person Sean Ahrens    schedule 17.11.2010    source источник
comment
Я думаю, проблема в том, что вы многого просите здесь. Позволяя не-пользователю выполнять действие пользователя, вы нарушаете свои аббревиатуры.   -  person re5et    schedule 18.11.2010


Ответы (2)


Я не понимаю, как № 4 «ломает» mvc. MVC только говорит о вещах на стороне сервера. Если запрос поступает из браузера, получающего URL-адрес, или скрипт, выполняющий XHR, он по-прежнему является «mvc» во всех отношениях; запрос поступает на контроллер, контроллер получает нужные модели, передает их в представление и отправляет обратно результат.

person Matt Briggs    schedule 02.12.2010
comment
Да, я думаю, ты здесь. немного слишком погрузился в проблему. - person Sean Ahrens; 02.12.2010

Разве рабочий процесс не был бы лучше, если бы вы не отображали форму комментариев для пользователей, которые не могли комментировать (потому что они не вошли в систему). Тогда вы могли бы, по крайней мере, отобразить текст со ссылкой, которая откроет модальное окно входа и позволит пользователю войти в систему. После того, как они вошли в систему, вы можете перенаправить их обратно к фотографии, которую они просматривали, вместе с отображаемой формой комментариев.

Я с re5et, рабочий процесс кажется ущербным.

person Clayton    schedule 02.12.2010