ActiveJob 中的 NameError(未定义的局部变量或方法“current_user”)

NameError (undefined local variable or method `current_user') in ActiveJob

我是在 Rails 中第一次创建工作,以便在他们创建表单时向 current_user 发送电子邮件。

创建方法

def create
    @pdform = Pdform.new(pdform_params)

    if user_signed_in?
      @pdform.user_id = current_user.id
    end

    respond_to do |format|
      if @pdform.save
        SubmissionJob.perform_later(current_user, @pdform)
        format.html { redirect_to new_pdform_requisition_path(@pdform) }
      else
        format.html { render :new }
      end
    end
  end

我在作业参数中传递 current_user@pdform

提交作业

class SubmissionJob < ApplicationJob
  queue_as :default

  def perform(*args)
    @user = current_user

    NewPdform.notify_user(@user, @pdform).deliver
  end
end

如果我在 arguments 的参数中传递 current_user 对象并将其分配给 @user 变量,为什么没有为 current_user 定义的方法?

我有此检查以将 pdform 的 user_id 设置为 current_user id,当我创建表单时正在填充它,这意味着有一个用户。那么为什么这会导致 NameError?

current_user 对象仅默认在控制器和视图中可用。 您需要将其作为参数传递给您的工作:

替换:

def perform(*args)

作者:

def perform(current_user, pdform)

甚至:

def perform(user, pdform)
  NewPdform.notify_user(user, pdform).deliver
end