【问题标题】:NameError (undefined local variable or method `current_user') in ActiveJobActiveJob 中的 NameError(未定义的局部变量或方法“current_user”)
【发布时间】:2018-03-07 16:13:36
【问题描述】:

我第一次在 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

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

我有此检查将pdform 的user_id 设置为current_user id,并且在我创建表示有用户的表单时正在填充。那么为什么这会导致NameError

【问题讨论】:

    标签: ruby-on-rails rails-activejob


    【解决方案1】:

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

    替换:

    def perform(*args)
    

    作者:

    def perform(current_user, pdform)
    

    甚至:

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

    【讨论】:

      猜你喜欢
      • 2013-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-14
      相关资源
      最近更新 更多