如果用户没有填写电子邮件字段,请阻止向用户发送电子邮件

时间:2015-06-03 02:35:15

标签: ruby-on-rails ruby email

我有一个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

2 个答案:

答案 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?