根据ActiveJobs guide第8节,它说:
这适用于在GlobalID :: Identification中混合的任何类, 默认情况下已混合到Active Model类中。
Mongoid::Document
混合ActiveModel::Model
,但我在其included_modules中找不到GlobalID::Identification
。
GlobalID::Identification
定义在哪里?
我可以有效地使用任何Mongoid::Document
作为我的ActiveJobs吗?
答案 0 :(得分:15)
指南中有一个错误。 GlobalID::Identification
混合了ActiveRecord
。如果您将GlobalID::Identification
混合到您的mongoid文档中,它将自动工作,因为GID要求实例响应id
(返回uniq标识符)和类以响应find
(传递{ {1}}将返回记录)。
答案 1 :(得分:8)
在初始化程序中输入这样的内容:
# 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
答案 2 :(得分:6)
要向遇到相同问题的任何人提供更多信息,只需将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