簡體   English   中英

Ruby on Rails-Rake任務中的未定義局部變量或方法

[英]Ruby on Rails - undefined local variable or method in rake task

我已經為Mailer創建了一個Rake Task,以便稍后計划Crontab並使用Gem每當時自動執行以向用戶發送電子郵件。 有一小段時間只是測試,以了解任務是否正常運行。

我的耙子任務和郵件程序如下。

require 'rake'

desc 'send digest email'
task send_warn_course: :environment do
  MailCourseWarnMailer.course_available(user).deliver!
end

# And my Mailer is:
class MailCourseWarnMailer < ActionMailer::Base

  def course_available(user)
    @user = user
    mail(to: @user.email, subject: "Curso disponível")
  end

end

我將參數傳遞給了任務,但這不起作用。 當我運行rake send_warn_course ,出現錯誤:

rake send_warn_course
rake aborted!
NameError: undefined local variable or method `user' for main:Object

有人知道發生了什么嗎? 我在這里想念什么?

由於錯誤提示您沒有User定義。

您需要輸入電子郵件ID或用戶ID,並需要從數據庫中查找用戶,然后將其傳遞給功能。

類似於以下內容:

require 'rake'

desc 'send digest email'
task :send_warn_course, [:user_email] => :environment do |t, args|
  user = User.find_by_email args[:user_email]
  MailCourseWarnMailer.course_available(user).deliver!
end

# And my Mailer is:
class MailCourseWarnMailer < ActionMailer::Base

  def course_available(user)
    @user = user
    mail(to: @user.email, subject: "Curso disponível")
  end

end

然后,您可以運行以下任務:

rake send_warn_course['user@email.com']

由於這是調度程序任務,因此您可能不想在每個任務中都傳遞變量,而希望執行一些數據庫查詢以找到相關的用戶。 但這只是為了演示錯誤的修復。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM