我有下面的resque作业,它生成一个csv文件并将其发送给邮件程序我想验证csv文件是否有数据,这样我就不会通过电子邮件发送空白文件。出于某种原因,当我在perform方法之外编写方法时,它将不起作用例如,当我知道csv文件的第一行有数据时,下面的代码将打印无效如果我取消注释下面的行,请确保它正常工作,但是我希望将此文件检查提取到单独的方法中这是对的吗?

class ReportJob
  @queue = :report_job

def self.perform(application_id, current_user_id)
 user = User.find(current_user_id)
 client_application = Application.find(client_application_id)
 transactions = application.transactions
 file = Tempfile.open(["#{Rails.root}/tmp/", ".csv"]) do |csv|
   begin
     csv_file = CSV.new(csv)
     csv_file << ["Application", "Price", "Tax"]
     transactions.each do |transaction|
       csv_file << [application.name, transaction.price, transaction.tax]
     end
   ensure
    ReportJob.email_report(user.email, csv_file)
    #ReportMailer.send_report(user.email, csv_file).deliver
     csv_file.close(unlink=true)
   end
 end
end

 def self.email_report(email, csv)
   array = csv.to_a
   if array[1].blank?
     puts "invalid"
   else
     ReportMailer.send_report(email, csv).deliver
   end
 end

end

最佳答案

您应该这样调用您的方法:

ReportJob.email_report(email, csv)

否则,请删除中的self
def self.email_report(email, csv)
   # your implementation here.
end

定义方法如下:
def email_report(email, csv)
  # your implementation.
end

我们称之为类方法和实例方法。

09-26 11:46