Как правильно выполнить действие создания Rails?

У меня есть действие User.create, которое предварительно регистрирует нового пользователя и отправляет электронное письмо со сгенерированным паролем. Каков наиболее похожий на Rails способ выполнить это действие? Я хочу делать все точно правильно с этого момента. Нет больше глупостей. На этот раз я серьезно.

Я думаю, это варианты...

  1. Создайте представление с именем login_email_sent.html.haml и визуализируйте его. (У него будет сообщение типа «спасибо, электронное письмо было отправлено с вашим логином».)

  2. Создайте представление с именем create.html.haml и позвольте Rails отображать его по умолчанию.

  3. Перенаправьте пользователя на ту же страницу, что и форма, которую он только что отправил, с сообщением во флэш-памяти.

Или что-то другое...?


person Ethan    schedule 10.02.2009    source источник


Ответы (4)


Это больше вопрос пользовательского опыта.

Оставьте действие создания как нечто, что просто создает и не имеет выходных данных (или просто простой заголовок 201 Created, если он создан с помощью вызова API). Сделайте redirect_to либо:

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

В 99,9% случаев вам никогда не понадобится шаблон для создания.

def create
  User.create(...)
  respond_to do |format|
    format.html { redirect_to signup_complete_url }
    format.xml  { render :head => :created }
  end
end

Например.

person Alex Wayne    schedule 10.02.2009

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

person Aram Verstegen    schedule 10.02.2009
comment
Я с вами в части перенаправления, но я не знаю о действиях шоу. Это не совсем показательная ситуация. Я не показываю экземпляр User (обычная цель действия show), просто страницу благодарности. Я думаю, может быть, перенаправить на специальное действие login_email_sent и просмотреть. Точно сказать не могу. - person Ethan; 10.02.2009
comment
Поход на шоу - это практика RESTful. После публикации на создание нового ресурса необходимо вернуть. - person Tony Pitale; 10.02.2009

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

person Scott Miller    schedule 10.02.2009

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

Если они ничего не могут сделать, вы можете перенаправить их на приветственную страницу с информацией / часто задаваемыми вопросами, чтобы помочь им получить преимущество и дать им почувствовать, что они подписались на что-то стоящее.

Кроме того, вместо того, чтобы отправлять им пароль по электронной почте, рассмотрите возможность отправки им ссылки на страницу настройки учетной записи пользователя, где они могут настроить свой пароль и другие данные. Ссылка будет содержать код доступа к черному ходу, связанный с новой учетной записью пользователя. Когда эта страница будет отправлена ​​и подтверждена, код черного хода может быть удален.

Тот же подход можно использовать для забытых паролей, как только пользователь устанавливает новый пароль или если он помнит его и входит в систему в обычном режиме, код черного хода удаляется.

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

person Noel Walters    schedule 10.02.2009