无法将CollectionProxy对象传递给ActiveJob

Burak Ozmen尚未活跃在Medium上。

我需要在后台标记一组消息(我正在使用delay_job gem),因为在前台花费一些时间。所以我创建了一个ActiveJobMarkMessagesAsReadJob,并传递了它usermessages变量以标记所有的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) } 

但是我认为一一标记是相当昂贵的。

绿色的

我认为简单的方法是将消息ID传递给该perform_later()方法,例如:

在控制器中:

@messages = @conversation.messages
message_ids = @messages.pluck(:id)
MarkMessagesAsReadJob.perform_later(current_user, message_ids) 

并将其用于ActiveJob

def perform(user, message_ids)
  messages = Message.where(id: ids)
  messages.mark_as_read! :all, :for => user
end

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法将嵌套对象传递给res.render()?

来自分类Dev

无法通过ajax将javascript对象传递给php

来自分类Dev

将Jquery对象传递给IMG无法使用的函数

来自分类Dev

无法将临时对象传递给移动构造函数

来自分类Dev

将JSON对象传递给MVC

来自分类Dev

将JSON对象传递给WebApi

来自分类Dev

将类对象传递给服务

来自分类Dev

将Java对象传递给python

来自分类Dev

将Class对象传递给方法

来自分类Dev

将线程对象传递给服务

来自分类Dev

无法将json对象传递给python服务器程序

来自分类Dev

无法将WebDriver对象传递给TestNG中的工厂方法

来自分类Dev

无法将Boost.Any对象传递给C ++ Lua绑定

来自分类Dev

无法将WebDriver对象传递给TestNG中的工厂方法

来自分类Dev

我无法将Excel.Application作为对象传递给方法

来自分类Dev

无法将记录添加到作为对象传递给方法的列表

来自分类Dev

角度材质无法将数据对象传递给 matdialog 对话框

来自分类Dev

将Javascript对象传递给HTML iframe(作为对象)

来自分类Dev

将“对象”对象传递给Ruby的枚举器

来自分类Dev

将JS对象传递给MVC局部对象?

来自分类Dev

无法将对象传递给Typescript中的构造函数

来自分类Dev

VB将ActiveX对象传递给函数

来自分类Dev

将FORTRAN对象传递给C,反之亦然

来自分类Dev

将初始化的对象传递给javascript函数

来自分类Dev

将Obj-C的Dictionary对象传递给Swift

来自分类Dev

将通用对象传递给方法中的列表-JAVA

来自分类Dev

将jQuery对象传递给setTimeout递归函数

来自分类Dev

通过引用将函数对象传递给std算法

来自分类Dev

将Google脚本对象传递给html模板