2015-01-07 16 views
8

, bölüm 8, diyor:Mongoid :: GlobalID :: Document ActiveJobs için Belge mi? <a href="http://edgeguides.rubyonrails.org/active_job_basics.html">ActiveJobs guide</a> göre

Bu varsayılan olarak aktif Modeli sınıfa karışmış durumda GlobalID :: Tanımlama, içinde karıştırır herhangi bir sınıf ile çalışır.

Mongoid::DocumentActiveModel::Model karıştırır, ama ben onun included_modules içinde GlobalID::Identification bulamıyorum.

  1. GlobalID::Identification nerede tanımlanır?

  2. ActiveJobs'ım için herhangi bir Mongoid::Document kullanabilir miyim?

cevap

14

Kılavuzlarda bir hata var. GlobalID::Identification, ActiveRecord'da karıştırılmıştır. Eğer mongoid belgeler içine GlobalID::Identification mixin ise GID (bir id rekor dönecektir geçen) find yanıt vermek ve sınıfı (uniq tanımlayıcı dönen) id yanıt örneğini gereğine göre otomatik çalışacaktır.

+0

çok teşekkür ederiz! – Geoffroy

+8

Başka birine yardımcı olması durumunda, modelinizin üst kısmına 'GlobalID :: Identification 'ifadesini ekleyerek" karıştırın ". – SteveO7

6

Aynı sorunu yaşayan herkese daha fazla bilgi sağlamak için, modelinize GlobalID::Identification ekleyerek çalışmasını sağlayabilirsiniz. Ancak

module Mongoid::Document 
    include GlobalID::Identification 
end 

, benim modellerini seri hale getirilmeye bilmiyordum hangi ActiveJob, bazen bazı gerçekten garip hatalar var:

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

Aslında Mongoid::Document reopenning tarafından yaptık. Bunu hata ayıklamak için çalıştı ama ActiveJob koduna geldi zaman vardı: beklendiği gibi

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

Ama ActiveJob::Arguments.serialize_argument çalışmadı.

geçici çözüm Mongoid::Relations::Proxy yeniden açmak için de şudur: in başlatıcısı böyle

class Mongoid::Relations::Proxy 
    include GlobalID::Identification 
end 
+0

'SerializationError' hatasını yeniden oluşturabilir misiniz? – bcd

+0

Zaten basit bir uygulama ile denedim ama işe yaramadı. Bu sorunu karmaşık bir uygulamada yaşıyorum ancak bu hatanın gerçekleşmesi için hiçbir neden bulamadım. Bu kod ile motorda , iyi çalışıyor, ancak bir Raylar uygulamanın içinden kullandığınızda, benim modelleri var olduğunu görebilirsiniz 'GlobalID :: Identification' ama bazıları bir bu savaştı doğru – Geoffroy

+4

seri hale getirmek için başarısız süre ve ne gördüğümü bir nesne, bir belongs_to derneği bir 'GlobalID :: Identification' nesne olarak raporlama değildi çıkardı olmasıydı. Benim düzeltme de 'Mongoid :: İlişkileri :: Proxy' içine' GlobalID :: Identification' dahil etmekti. Ben marshalable ait mongoid kullanmasıyla ilişkili inanıyorum ama tamamen emin değilim. –

6

şey koyun:

# 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 
İlgili konular