2013-10-25 3 views
0

Как отправить асинхронное письмо с рельсами 4? Под этим я подразумеваю, что когда я нажимаю кнопку «отправить» формы контакта, страница не обновляется, но электронное письмо проверяется и отправляется, и пользователю сообщается сообщение.Отправить асинхронное письмо

Я правильно настроил action_mailer и отправил почтовую программу ContactForm с одним действием contact, которое берет адрес электронной почты в качестве параметра.

В результате

ContactForm.contact("[email protected]").delivers #=> delivers email perfectly 

Но это работает в командной строке. Я действительно не знаю, как правильно это сделать со ссылкой. Я имею в виду, я мог бы создать кнопку, которая naviagates к send_email, и тогда я мог бы иметь маршрут, как это:

get 'send_email', to: 'contact#sendemail' 

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

Является ли Ajax и JSON ключом для выделения полей? Как насчет проверки?

resque_mailer, кажется, хороший способ отправить асинхронные письма. Но зачем мне этот внешний камень, когда ajax так хорошо обрабатывается ванильными рельсами?

ответ

0

Концепция заключалась бы в том, чтобы форма отправлялась удаленно. i.e подать в create метод в ContactsController. Затем метод вызовет рабочего (resque/sidekiq) для отправки электронной почты.

create действие может также ответить на json. Ответ json может быть успешным или неудачным (с ошибками).

При обратном вызове AJAX вы можете активировать оповещение, отображение div или любое другое уведомление, которое было отправлено электронной почтой.

Если результаты json возвращаются с помощью erros, вы можете отобразить сообщение об ошибке через JS.

Смежные вопросы