Rails将基于用户输入的邮政编码与数据库进行比较,然后邮寄给员工

时间:2019-01-14 14:01:28

标签: ruby-on-rails

我们有一个“客户”表单,该表单不存储数据,但具有一个表单,然后将其推送给联系人。我想做的是,当客户输入数据时,是要从表单中获取邮政编码,并将其与所有邮政编码进行比较,如果匹配,则将他们的联系信息发送给所在地区的经理。

简而言之,Bill输入10001,并且与区域ID为3的Zipcodes数据库匹配。因此,区域3的经理会收到电子邮件。

对于我拥有的型号:

Zipcode
belongs_to :region

Region
has_many :zipcodes, dependent: :destroy

Contact
include ActiveModel::Model
attr_accessor :first_name, :last_name, :company, :region, :email, :message_for_mailer, :inquiry, :address, :city, :state, :zipcode

在我的ContactsController中,我具有以下创建条件:

 def create
  @contact = Contact.new(contact_params)
  @contact.valid?
  if captcha?
   ContactMailer.contact_request(@contact).deliver if @contact.valid?
  else
   @contact.errors.add(:base, 'Please verify you are human')
  end
  respond_with @contact
 end

我的想法是:

def create
 @zipcode = Zipcode.all
 @contact = Contact.new(contact_params)
 @contact.valid?
 if captcha?
   if @contact.zipcode == @zipcode.zipcode
     ContactMailer.custom_request(@contact).deliver if @contact.valid?
   else
     ContactMailer.basic_request(@contact).deliver if @contact.valid?
   end
 else
   @contact.errors.add(:base, 'Please verify you are human')
 end
 respond_with @contact
end

但是我很确定这是行不通的,因为我实际上没有与数据库进行比较。那么如何用创建的数据结果遍历Zipcode表呢?

1 个答案:

答案 0 :(得分:0)

我将使用ActiveJob创建可以在发送响应后执行的作业。这使该应用程序更加灵活,因为用户不必等待发送电子邮件的时间,从而释放了您的Web线程。

loop

然后您可以简单地从控制器中处理作业:

// motor functionings
void mPower(int m1, int m2){
    // Left Motor
    if(m1 > 0){ //left motor move foward
        digitalWrite(IN1,HIGH);
        digitalWrite(IN2,LOW);
    }else{ ////left motor move backward
        digitalWrite(IN1,LOW);
        digitalWrite(IN2,HIGH );
        m1 = m1*-1; //convert m1 into positive value
    }
    analogWrite(ENA,m1); //set pwm value according to m1

    //Right Motor
    if(m2 > 0){   //right motor move foward
        digitalWrite(IN3,HIGH);
        digitalWrite(IN4,LOW);
    }else{        //right motor move backward
        digitalWrite(IN3,LOW);
        digitalWrite(IN4,HIGH );
        m2 = m2*-1; //convert m2 into positive value
    }
    analogWrite(ENB,m2); //set pwm value according to m2

}

void loop() {
    mPower(leftSpeed, rightSpeed);
}

它将在排队系统免费时执行。