我将在一个应用程序中利用Mongoid的单一集合继承。但是,有一个地方我想禁用此功能。我正在考虑数据库迁移(使用mongoid_rails_migrations gem),我重新定义模型以使我的迁移更易于维护。在这种情况下,我希望将_type
字段视为普通属性。
如何在Mongoid中实现它?
答案 0 :(得分:1)
尝试this article中提供的解决方案。定义以下模块并将其包含在要禁用单个集合继承的模型中。
module NoHeritage
extend ActiveSupport::Concern
included do
# Internal: Preserve the default storage options instead of storing in the
# same collection than the superclass.
delegate :storage_options, to: :class
end
module ClassMethods
# Internal: Prevent adding _type in query selectors, and adding an index
# for _type.
def hereditary?
false
end
# Internal: Prevent Mongoid from defining a _type getter and setter.
def field(name, options = {})
super unless name.to_sym == :_type
end
# Internal: Preserve the default storage options instead of storing in the
# same collection than the superclass.
def inherited(subclass)
super
def subclass.storage_options
@storage_options ||= storage_options_defaults
end
end
end
end
这篇文章是从2015年开始的,因此Mongoid可能会有一些变化,所以你可能需要稍微调整一下这个解决方案。但无论如何它应该给你一个良好的开端。