gpt4 book ai didi

ruby-on-rails - 如何禁用 Mongodb 继承? (忽略类型字段)

转载 作者:行者123 更新时间:2023-12-01 22:58:21 24 4
gpt4 key购买 nike

我将在一个应用程序中利用 Mongoid 的单一集合继承。但是,有一个地方我想禁用此功能。我正在考虑数据库迁移(使用 mongoid_rails_migrations gem),我在其中重新定义模型以使我的迁移更易于维护。在本例中,我希望将 _type 字段视为普通属性。

如何在 Mongoid 中实现它?

最佳答案

尝试 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 可能发生了一些变化,所以您可能需要稍微调整这个解决方案。但无论如何,它应该给你一个好的开始。

关于ruby-on-rails - 如何禁用 Mongodb 继承? (忽略类型字段),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48200592/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com