【发布时间】:2015-11-16 05:15:30
【问题描述】:
我需要在后台标记一组消息(我正在使用delayed_job gem),因为在前台需要一些时间。所以我创建了一个ActiveJob 类MarkMessagesAsReadJob,并将user 和messages 变量传递给它,以便标记所有messages 读取为user。
// passing the values in the controller
@messages = @conversation.messages
MarkMessagesAsReadJob.perform_later(current_user, @messages)
在我的 ActiveJob 类中,我执行任务。
// MarkMessagesAsReadJob.rb
class MarkMessagesAsReadJob < ActiveJob::Base
queue_as :default
def perform(user, messages)
messages.mark_as_read! :all, :for => user
end
end
但是,当我尝试执行任务时,我得到了错误 ActiveJob::SerializationError(不支持的参数类型:ActiveRecord::Associations::CollectionProxy):
我读到我们只能将支持的类型传递给 ActiveJob,我认为它不能序列化 CollectionProxy 对象。我该如何解决/解决这个问题?
PS:我考虑过
@messages.map { |message| MarkMessagesAsReadJob.perform_later(current_user, message) }
但我认为一一标记它们非常昂贵。
【问题讨论】:
标签: ruby-on-rails delayed-job rails-activejob