У меня есть простая контактная форма, которая принимает следующие поля (все должны быть обязательными): имя, адрес электронной почты, телефон и сообщение.
Я также хочу подтвердить адрес электронной почты.
Пользователи должны получить ответ о том, была ли форма успешно отправлена, или если есть ошибки.
, если это так, отображать определенные ошибки в представлении.
Эта форма не связана с какой-либо моделью базы данных. Я не сохраняю представления. Только рассылка.
У меня POST-маршрут установлен в contact_form
в моем PagesController
В моем PagesController у меня есть
def contact_form
UserMailer.contact_form(contact_form_params).deliver
end
В моем классе UserMailer у меня есть:
def contact_form(params)
@formParams = params;
@date = Time.now
mail(
to: "support@example.com",
subject: 'New Contact Form Submission',
from: @formParams[:email],
reply_to: @formParams[:email],
)
end
Это сообщение успешно отправлено, но проверки нет. Мне нужно только запустить почтовый блок, если проверка прошла успешно. затем верните ответ пользователю.
Поскольку у меня нет модели, я не уверен, как это сделать. Все ответы, которые я вижу, говорят людям использовать validates
в модели ActiveRecord.
С несколькими ответами:
(обратите внимание, я обновил свои параметры)
class UserMailerForm
include ActiveModel::Validations
def initialize(options)
options.each_pair{|k,v|
self.send(:"#{k}=", v) if respond_to?(:"#{k}=")
}
end
attr_accessor :first_name, :last_name, :email, :phone, :message
validates :first_name, :last_name, :email, :phone, :message, presence: true
validates :email, format: { with: URI::MailTo::EMAIL_REGEXP }
end
def contact_form
@form = UserMailerForm.new(contact_form_params)
if @form.valid?
UserMailer.contact_form(contact_form_params).deliver
else
logger.debug('invalid')
logger.debug(@form.valid?)
end
end
Отправляет почту, когда она действительна. Тем не менее, я все еще не уверен насчет отправки информации пользователю