如何通过单击Rails 5中的按钮发送电子邮件

时间:2018-07-19 06:32:37

标签: ruby-on-rails ruby-on-rails-5

我对铁轨有点生锈。我试图通过单击带有动作邮件的按钮来发送电子邮件。我有一个驱动程序模型,其中有一个电子邮件字段。我希望有一个按钮,单击该按钮后即可将电子邮件发送到driver.email字段。我不断收到不同的错误。我尝试了不同的方法,四处张望,但找不到解决方法。

我得到的错误:

  • 找不到ID =“”的驱动程序
  • 错误的参数数量(1代表0)

我有一个驱动程序表,下面是架构。

create_table "drivers", force: :cascade do |t|
t.string "first_name"
t.string "last_name"
t.string "phone"
t.string "city"
t.string "state"
t.string "email"
t.boolean "active"
t.string "load"
t.string "status"
t.string "comments"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false

这是我的行动邮件。

class DriverMailer < ApplicationMailer
def send_mail
 @driver  = Driver.find.(params[:id])
 mail(to: @driver.email, subject: "You have a new load to deliver")
end
end

我在Drivers控制器中创建了一个动作,如下所示。

def send_mail 
  DriverMailer.send_mail(@driver).deliver_now
  flash[:notice] = "Email has been sent."
  redirect_to driver_path(@driver.id)
end

这是我的路线。rb

Rails.application.routes.draw do
  resources :drivers
   get "/send_mail" => 'drivers#send_mail'
end

在我的index.html中,我有一个链接,指向用户单击发送邮件的位置,它将向驱动程序模型中保存的电子邮件发送电子邮件。

 <%= link_to 'Send mail', send_mail_path(@driver), class: "big-button"%>

1 个答案:

答案 0 :(得分:0)

  

我在Drivers控制器中创建了一个动作,如下所示。

错误,应该是

def send_mail
  driver  = Driver.find(params[:id]) //if you're not using before action set_driver
  DriverMailer.send_mail(driver).deliver_now
  flash[:notice] = "Email has been sent."
  redirect_to driver_path(driver.id)
end

还有,您的邮件程序方法定义中的参数在哪里?

def send_mail(driver)
  @driver = driver
  mail(to: @driver.email, subject: "You have a new load to deliver")
end

现在您的路线是

get "/send_mail" => 'drivers#send_mail'

错误,通过了:id

get "/send_mail/:id" => 'drivers#send_mail', as: 'send_mail'