Должны ли вы по-прежнему передавать только идентификатор объекта при использовании ActiveJob?

Каковы плюсы и минусы следующих действий в ActiveJob:

Вариант А:

// Controller
MyJob.perform_later(object.id)

// my_job.rb
def perform(object_id)
  object = Object.find(object_id)
  // do stuff
end

Вариант Б:

// Controller
MyJob.perform_later(object)

// my_job.rb
def perform(object)
  // do stuff
end

person Jacob    schedule 21.06.2015    source источник


Ответы (1)


ActiveJob теперь использует новую Globalid библиотеку за кулисами для сериализации/десериализации экземпляра ActiveRecord, поэтому теперь вы можете передать объект ActiveRecord.

Лично я предпочитаю продолжать передавать идентификатор, так как это делает код более совместимым с другими компонентами и не привязывает мой код на неопределенный срок к определенному поведению ActiveJob, но это скорее личный выбор.

person Simone Carletti    schedule 21.06.2015
comment
Я также предпочитаю передавать идентификатор, в моем случае у ActiveJob была ошибка при попытке десериализовать аргументы, потому что у меня есть «UrlValidator» для передаваемого объекта. Передача только идентификатора, например, @Jacob Вариант A сработал для меня. - person VegaStudios; 03.06.2018
comment
@simone-carletti Можете ли вы объяснить, что вы имеете в виду, говоря, что это делает код более совместимым с другими компонентами? - person jayqui; 12.07.2018