首页 > 解决方案 > 作业上的 Rails ArgumentError - 参数数量错误 - 如何调试?

问题描述

我正在尝试使用以下规范在我的规范内创建工作,但不断收到 ArgumentError:-

MyJob.new.perform_now(user_id: @current_user.id, building_ids: [building.id])

module ActionPlan
class MyJob < ApplicationJob
queue_as :low

def perform(user_id:, building_ids:, **_args)
  @user = User.find(user_id)
  @buildings = ActionPlan::Reminder.where(user_id: user_id)
  @buildings.map(&method(:create_alerts))
end

我不断得到wrong number of arguments (given 1, expected 0) (ArgumentError)。我哪里错了?perform 方法需要 2 个参数,对吧?我将如何调试这个?

标签: rubyruby-on-rails-5rails-activejob

解决方案


试试这个:

module ActionPlan
  class MyJob < ApplicationJob
    queue_as :low

    def initialize(user_id:, building_ids:, **_args)
      @buildings = ActionPlan::Reminder.where(user_id: user_id)
    end

    def perform
      buildings.map(&method(:create_alerts))
    end

    private

    attr_accessor :buildings
  end
end

那应该允许您致电:

MyJob.new(user_id: @current_user.id, building_ids: [building.id]).perform


推荐阅读