Как я могу найти () ресурс, переданный работнику sidekiq? - PullRequest
1 голос
/ 28 мая 2020

В принципе, у меня есть блок кода, который нужно выполнить внутри работника sidekiq, который будет взаимодействовать с ресурсом, переданным в качестве аргумента (возможно). Этот ресурс представляет собой модель Rails.

В отличие от других вопросов по SO, связанных с передачей аргументов работнику, здесь я не знаю, будет ли это модель User или House. Поэтому я не могу просто использовать MyWorker.perform(user_id), так как я не знаю, какой идентификатор модели я передам в качестве аргумента.

Кроме того, я читал, что не могу просто ожидать передачи своего объекта модели работнику sidekiq и получите его на другой стороне, как только он преобразует его в json.

Итак, я имел в виду примерно следующее:

# somewhere_in_my_code.rb

MyWorker.perform(resource.id, resource_model) # still don't know what this resource_model would be

# my_worker.rb

def perform(resource_id, resource_model)
  model = some_magic_method_to_return_a_model(resource_model)
  resource = model.find(resource_id)

  # do what I have to do with the resource found
end

Но я действительно не знаю, существует ли этот some_magic_method_to_return_a_model. Или, если это вообще возможно. В любом случае, любая помощь будет принята с благодарностью!

ПРИМЕЧАНИЕ: я использую Ruby 2.4.8, Rails 4.1.10, Sidekiq 4.1.0

1 Ответ

1 голос
/ 28 мая 2020

Есть. Предположим, у вас есть модель User:

> user = User.last
> id = user.id
> model_name = user.model_name.name
> model_name.safe_constantize.find(id)
> model_name.safe_constantize.find(id) == user
=> true

В основном так работают ассоциации polymorphi c в Rails.

...