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
Ortak işlevsellik doğrudan gem kaynağına ekliyor musunuz? Hangi sınıfı değiştirmeye çalışıyorsun? – Chris
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. –
Buna daha iyi bir çözüm buldunuz mu? Aynı sorunu yaşıyorum. –