Sidekiq выдает ошибку Active Record Unknown Primary Key Error для объекта Active Type

Я использую гем Sidekiq в своем приложении Rails для асинхронной обработки некоторых длительных процессов. Как показано в этом Railscast, ссылка на обрабатываемую модель передается как аргумент perform_async метода рабочего класса, выполняющего фоновую обработку.

Это не было бы проблемой, если бы рассматриваемая модель была объектом Active Record. Однако это объект Active Type, созданный для «кряканья, как ActiveRecord», и, к сожалению, он не крякает так громко, как Я получаю ActiveRecord::UnknownPrimaryKeyError.

Как мне установить первичный ключ для объекта Ruby, который на самом деле не является объектом db, и убедить Sidekiq рассматривать его как таковой? Невозможно почерпнуть информацию о том, как это сделать, на странице активного типа Github.

Любая помощь будет оценена!


person divergent    schedule 26.08.2015    source источник


Ответы (1)


Это зависит от того, что вы хотите делать со своим объектом активного типа. Как Документация заявляет

Аргументы, которые вы передаете в perform_async, должны состоять из типов данных simple JSON: строка, целое число, число с плавающей запятой, логическое значение, null, массив и хэш.

Если у вас нет идентификатора для идентификации объекта (из вашего сообщения я понимаю, что у вас его нет), то лучшим решением было бы преобразовать объект в хэш, а затем передать его perform_async. Но, как я уже сказал, это зависит от того, какие данные вам нужны от вашего объекта. В некоторых случаях вам может не понадобиться использовать хеш, и будет достаточно более простого типа данных.

person user3790827    schedule 27.08.2015
comment
Поэтому я передаю атрибут title объекта активного типа, строку, в perform_async при отсутствии идентификатора. Но проблема заключается не в отсутствии идентификатора, а в отсутствии первичного ключа, как у объекта активного типа. Я только что попытался использовать Sidekiq с реальным объектом Active Record, и он отлично сработал. Что мне интересно, так это то, есть ли способ сделать объект Active Type более Active Record, например, установив ключ p. Спасибо. - person divergent; 27.08.2015
comment
Я пытался сделать self.primary_key = :title в active_type_object.rb, но это не сработало - person divergent; 27.08.2015