10

根据ActiveJobs 指南,第 8 节,它说:

这适用于任何混入 GlobalID::Identification 的类,默认情况下它已混入 Active Model 类中。

Mongoid::Documentmixes ,但我在其包含的模块中ActiveModel::Model找不到。GlobalID::Identification

  1. 在哪里GlobalID::Identification定义?

  2. 我可以有效地将任何Mongoid::Document用于我的 ActiveJobs 吗?

4

3 回答 3

16

指南中有错误。GlobalID::Identification已经混进去了ActiveRecord。如果您将混入GlobalID::Identification到您的 mongoid 文档中,它将自动工作,因为 GID 需要实例响应id(返回 uniq 标识符)和响应的类find(传递 anid将返回记录)。

于 2015-01-07T14:29:51.577 回答
10

在你的初始化器中加入这样的东西:

# config/initalizers/mongoid.rb

if defined?(Mongoid)
  # GlobalID is used by ActiveJob (among other things)
  # https://github.com/rails/globalid

  Mongoid::Document.send(:include, GlobalID::Identification)
  Mongoid::Relations::Proxy.send(:include, GlobalID::Identification)
end
于 2016-03-24T09:45:36.500 回答
8

要向遇到相同问题的任何人提供更多信息,您只需将其添加GlobalID::Identification到您的模型中即可。

class User
  include Mongoid::Document
  include GlobalID::Identification
end

我实际上是通过重新打开来做到这一点的Mongoid::Document

module Mongoid::Document
  include GlobalID::Identification
end

但是,有时我会遇到一些非常奇怪的错误,ActiveJob不知道如何序列化我的模型。我试图调试它,但每当我进入ActiveJob代码时,我都有:

pry> User.is_a? GlobalID::Identification
=> true

但是ActiveJob::Arguments.serialize_argument没有按预期工作。

解决方法也是重新打开Mongoid::Relations::Proxy

class Mongoid::Relations::Proxy
  include GlobalID::Identification
end
于 2015-02-01T14:38:47.517 回答