I am using mongoid and MongoDB and have come lately to a very tough problem and I need an advice.
I am working on a CMS and one of the ideas was that CMS would provide some basic models definitions and end user would, if needed, extend basic class with its own extension and save them to different collection (table).
class DcPage include Mongoid::Document
field a .... belongs_to b .... validates a .... end
class MyPage < DcPage field c .... validates c .... end
Up until last version of mongoid this worked (with little hack) and data would be saved to my_pages collection. Because of some problem, they no longer support this behaviour and data always gets saved to dc_pages collection.
When explaining my problem, they suggested that I use ActiveSupport::Concern and provided me with an example. Which works perfectly OK if extended class is defined in same source file. Which btw. never happens in praxis.
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
So far I have found out that it works if I require basic source file in my second file. Which looks like this: require '/some/path/to/my/gem/app/models/dc_page.rb
You can see my pain. Basic source file would of course be backed into gem and therefor becomes a moving target.
Please help me with better solution.
by TheR