2013-04-28 16 views
5

Ben raylar 3 ile mongoid kullanıyorum ve son zamanlarda çok zorlu bir sorun var ve bir öneriye ihtiyacım var.ActiveSupport :: Endişe ve uzanan mongoid modeli

Bir CMS üzerinde çalışıyorum ve fikirlerin bir CMS sağlayacağını oldu modelleri tanımlar ve son kullanıcı, gerekirse kendi tanımları ve kontrolleri ile temel sınıfını genişletmek ve (farklı koleksiyonlarda onları kurtarmak istiyorum bazı temel tablolar).

class DcPage 
    include Mongoid::Document 

    field a .... 
    belongs_to b .... 
    validates a .... 
end 

class MyPage < DcPage 
    field c .... 
    validates c .... 
end 

mongoid son sürümü bu (küçük kesmek ile) çalıştı ve veri my_pages koleksiyonuna kaydedilmiş olacaktır zamana kadar. Bazı problemlerden dolayı, numaralı mongoid daha uzun bir süredir bu davranışı desteklemektedir ve veriler her zaman dc_pages koleksiyonuna kaydedilir.

Sorunumu açıklarken mongoid takımı, ActiveSupport :: Concern'i kullanmamı önerdi ve bana bir örnek verdi. Hangi genişletilmiş sınıf aynı kaynak dosyasında tanımlanmışsa, çalışır. Hangi btw. praksiste asla olmaz.

module CommonBehaviour 
    extend ActiveSupport::Concern 

    included do 
    field :subject, type: String, default: '' 
    # ... 
    end 
end 

class DcPage 
    include Mongoid::Document 
    include CommonBehaviour 
end 

class MyPage 
    include Mongoid::Document 
    include CommonBehaviour 
end 

Şimdiye kadar ben benim ikinci dosyasında temel kaynak dosyasını gerektiriyorsa çalıştığını öğrendim. Buna benzer: , '/some/path/to/my/gem/app/models/dc_page.rb

Ağrımı şimdi görebilir miyim? Temel kaynak dosyası elbette gem'e yedeklenecek ve bu da hareketli bir hedef haline gelecektir.

Lütfen daha iyi bir çözüm için bana yardımcı olun. Bu tek tablo miras desen olduğu için Ther

+1

Ortak işlevsellik doğrudan gem kaynağına ekliyor musunuz? Hangi sınıfı değiştirmeye çalışıyorsun? – Chris

+0

CommonBehaviour modul ve DcPage sınıfının, gem dosyasında bulunan ../app/models/dc_page.rb ile aynı kaynak dosyasında olduğunu varsayalım. MyPage sınıfı, geçerli uygulama içinde ../app/models/my_page.rb olarak tanımlanmıştır ve DcPage sınıfını genişletir. Bu senaryoda, her iki sınıfa dahil olan CommonBehaviur modülünü içerir. –

+0

Buna daha iyi bir çözüm buldunuz mu? Aynı sorunu yaşıyorum. –

cevap

1

Bu işe yaramazsa nedeni ile

olduğunu. Bunun çalışması için tablo mirasını kapatmanız gerekir. Bununla birlikte, mongoid devlerden gelen öneri bu durumda gitmek için doğru yoldur. Modül/sınıflarınızı doğru şekilde gerektirmeniz gerektiği gibi görünüyor.

İlgili konular