我有一个Rails应用程序,我有一个主页的visitor_controller和一个联系表单的contacts_controller。我的网站必须是单页的,所以我在访问者控制器内调用Contact.new。
执行提交操作时,在contacts_controller中,用户被重定向到root_path
,保存或出错。
有一个电子邮件字段,用于向用户发送邮件。当用户没有填充时会发生挫折,并且出于某种原因,用户被重定向到contacts_path而不是root_path。
它会抛出以下错误:An SMTP To address is required to send a message. Set the message smtp_envelope_to, to, cc, or bcc address.
这是读取电子邮件并传递给用户的功能:VisitorMailer.landing_form_notify_user(@contact).deliver_now
不填写它会将用户重定向到contacts_index。
问题:如果用户没有填写电子邮件字段,如何停止执行此功能?
应用程序/控制器/ visitors_controller.rb
class VisitorsController < ApplicationController
def index
@contact = Contact.new
end
end
应用程序/控制器/ contacts_controller.rb
def create
@contact = Contact.new(contact_params)
respond_to do |format|
if @contact.save
VisitorMailer.landing_form_notify_user(@contact).deliver_now
format.html { redirect_to root_path, notice: 'Good' }
format.json { render root_path, status: :created, location: @contact }
else
format.html { render root_path }
format.json { render json: @contact.errors, status: :unprocessable_entity }
end
end
end
应用程序/邮寄者/ visitors_mailer.rb
class VisitorMailer < ApplicationMailer
default :from => "mygmail@gmail.com"
def landing_form_notify_user(user)
@user = user
email_with_name = %("#{@user.name}" <#{@user.email}>)
mail(
to: "#{@user.email}",
subject: "#{@user.name}" + ', hi.'
)
end
end
答案 0 :(得分:2)
如果您不想在电子邮件地址丢失的情况下尝试发送电子邮件,那么您只需检查电子邮件地址,然后再致电邮件。
def create
@contact = Contact.new(contact_params)
respond_to do |format|
if @contact.save
unless @contact.email.blank?
VisitorMailer.landing_form_notify_user(@contact).deliver_now
end
# more stuff to do if save succeeds
else
# stuff to do if save fails
end
end
end
答案 1 :(得分:1)
VisitorMailer.landing_form_notify_user(@contact).deliver_now if @contact.email.present?