Ruby on rails 从rails中的活动作业类调用服务类

Ruby on rails 从rails中的活动作业类调用服务类,ruby-on-rails,background-process,jobs,sidekiq,Ruby On Rails,Background Process,Jobs,Sidekiq,我有一个rails控制器类,它调用我的活动作业类 class Api::V2::Events::WegSessionsController < Api::V2::Events::ApplicationController before_action :load_service .... some code def synchronize @service.keep_cancelled = params[:keep_cancelled].to_b if @service.valid_co

我有一个rails控制器类,它调用我的活动作业类

class Api::V2::Events::WegSessionsController < Api::V2::Events::ApplicationController
before_action :load_service

.... some code

def synchronize
@service.keep_cancelled = params[:keep_cancelled].to_b
if @service.valid_connection?

  WegJob.perform_later

  render json: {
    status: :ok,
    message: @service.message
  }, status: :ok
else
  render json: {
    status: :unprocessable_entity,
    errors: @event.errors.full_messages
  }, status: :ok
end
end

... some code

def load_service
  @service = WegService.new(event: @event)
end
end
class WegService
 include ActiveModel::Model

... some code

def synchronize
 if event.weg_synced_at.present?
  update
 else
  create
 end

 event.update(weg_synced_at: Time.current)
end

... some code along with update and create method implementations.
end
当我这样做时,我得到了以下错误

[ActiveJob] [WegJob] [fd7c1869-6909-471c-bf32-9b2270a8c39c] Error performing 
WegJob (Job ID: fd7c1869-6909-471c-bf32-9b2270a8c39c) from Async(default) in 
2556.3ms: NoMethodError (undefined method `synchronize' for WegService:Class):

我知道我在作业类中调用服务方法的方式是错误的。哪里可能出错?

您正在WegService中定义一个实例方法:

class WegService
 include ActiveModel::Model

... some code

def synchronize
 if event.weg_synced_at.present?
  update
 else
  create
 end

 event.update(weg_synced_at: Time.current)
end

... some code along with update and create method implementations.
end
然而,您调用它就像调用类方法一样:

class WegJob < ApplicationJob
  queue_as :default

  def perform(*args)
    WegService.synchronize
  end
end

但对于服务对象来说,这是一个极为可疑的设计。这个名称非常模糊,服务对象实际上只应该有一个调用方法<代码>包含ActiveModel::Model还告诉我,您创建的实际上只是一个模型。

您正在WegService中定义一个实例方法:

class WegService
 include ActiveModel::Model

... some code

def synchronize
 if event.weg_synced_at.present?
  update
 else
  create
 end

 event.update(weg_synced_at: Time.current)
end

... some code along with update and create method implementations.
end
然而,您调用它就像调用类方法一样:

class WegJob < ApplicationJob
  queue_as :default

  def perform(*args)
    WegService.synchronize
  end
end

但对于服务对象来说,这是一个极为可疑的设计。这个名称非常模糊,服务对象实际上只应该有一个调用方法
include ActiveModel::Model
还告诉我,您创建的实际上只是一个模型。

是否有一种方法可以将我的服务类的对象实例(@service)从控制器传递到我的作业类,这样我仍然可以调用“synchronize”方法作为实例方法?是否有一种方法可以传递对象实例(@service)将我的服务类从控制器添加到我的作业类,以便我仍然可以调用“synchronize”方法作为实例方法?