2015-01-07 3 views
8

ActiveJobs guide、セクション8によると、それは言う:Mongoid :: DocumentはActiveJobsのグローバルID ::識別ですか?

これは、デフォルトでアクティブなモデルクラスに混入されたGlobalID ::識別、 をミックス任意のクラスで動作します。

Mongoid::DocumentActiveModel::Modelをミックスし、私はそのincluded_modulesでGlobalID::Identificationを見つけることができません。 GlobalID::Identificationが定義されている

  1. は、私は効果的に私のActiveJobsのための任意のMongoid::Documentを使用することはできますか?

答えて

14

ガイドに誤りがあります。 GlobalID::IdentificationActiveRecordで混合されています。あなたはmongoid文書にGlobalID::Identificationをミックスインした場合GIDは(idがレコードを返します渡す)findに対応し、クラス(uniqの識別子を返す)idに対応するために、インスタンスを必要として、それは自動的に動作します。同じ問題を抱えて誰にもより多くの情報を提供するために、

+0

はどうもありがとうございました! – Geoffroy

+8

ケースでは、モデルの最上部にGlobalID :: Identification'が含ま '追加することにより、他の誰かが、あなたの「ミックスイン」するのに役立ちます。 – SteveO7

6

、あなたはそれが単にあなたのモデルにGlobalID::Identificationを追加することで動作させることができます。私は実際にMongoid::Documentをreopenningであることをやった

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

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 
+0

'SerializationError'バグを再現できますか? – bcd

+0

私はすでに単純なアプリケーションで試してみましたが、うまくいきませんでした。私は複雑なアプリケーションでこの問題を抱えていますが、このバグが発生する理由は何も見つかりませんでした。 このコードのエンジンではうまくいきますが、Railsアプリケーションで使用すると、モデルに「GlobalID :: Identification」がありますが、一部が正しくシリアライズできないことがわかります – Geoffroy

+4

私はこれと私が見たのは、belongs_toアソシエーションから取り除かれたオブジェクトが 'GlobalID :: Identification'オブジェクトとして報告されていないということでした。私の修正は 'Mongoid :: Relations :: Proxy'に' GlobalID :: Identification'を含めることでした。私はmonghalのmarshalableの使用に関連すると信じていますが、私は完全にはわかりません。 –

6

# 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 
関連する問題