Delayed::Job 丢失活动记录关系,取而代之的是数组

Delayed::Job losing active record relation, but instead array

我有一份发送电子邮件的工作class。我正在将集合(活动记录关系对象,假设 @payments = Payment.where(status: 'pending') 传递给 Mailer class 的参数。

Delayed::Job.enqueue(
  EmailJob.new(
    company: current_company,
    type: :payments,
    collection: @payments # Payment::ActiveRecord_Relation
  ),
  target: 'Payment Email',
  company: current_company
)

我面临的问题是,当工作人员选择工作时,该集合仅被视为 Array 付款,我希望将其作为 activerecord 集合对象,以便我可以做一些事情在那些之上。

ActiveJob supports the following types of arguments by default:

  • Basic types (NilClass, String, Integer, Float, BigDecimal, TrueClass, FalseClass)
  • Symbol
  • Date
  • Time
  • DateTime
  • ActiveSupport::TimeWithZone
  • ActiveSupport::Duration
  • Hash (Keys should be of String or Symbol type)
  • ActiveSupport::HashWithIndifferentAccess
  • Array
  • Module
  • Class

- Rails guides: Active Job Basics

当您传递 ActiveRecord::Relation 时,Rails 会将其序列化为数组,因为它不受支持。 ActiveJob 确实使用 GlobalId 来传递个人记录,所以看起来更好的选择可能只是创建一个关联或一些其他方法来获取给定公司的工作付款。

另请参阅无法将 CollectionProxy 对象传递给 ActiveJob .