我对铁轨有点生锈。我试图通过单击带有动作邮件的按钮来发送电子邮件。我有一个驱动程序模型,其中有一个电子邮件字段。我希望有一个按钮,单击该按钮后即可将电子邮件发送到driver.email字段。我不断收到不同的错误。我尝试了不同的方法,四处张望,但找不到解决方法。
我得到的错误:
我有一个驱动程序表,下面是架构。
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"%>
答案 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'