【问题标题】:Mongoid inheritance without changing collection不改变集合的 Mongoid 继承
【发布时间】:2015-07-29 20:04:14
【问题描述】:

我一直在使用 rails 和 mongoid 并且有以下模型(例如):

class SocialMedia
end

class Facebook < SocialMedia
    include Mongoid::Document
    field :fans
end

class Instagram < SocialMedia
    include Mongoid::Document
    field :fans
end

我想将两个“粉丝”字段从 Facebook 和 Instagram 转移到 SocialMedia 类(继承)而不更改集合。如果我这样做:

class SocialMedia
    include Mongoid::Document
    field :fans
end

我最终得到了一个名为 social_media 的新集合,其 _type 为 facebook 或 instagram。由于该数据库已经非常庞大,因此无法对其进行更新。

有什么想法吗?

【问题讨论】:

    标签: ruby-on-rails inheritance mongoid reverse


    【解决方案1】:

    您可以使用关注点来做到这一点。创建这样的问题

    module Sociable
      extend ActiveSupport::Concern
      included do
        field :fans
      end
    end
    

    然后在你的两个模型中都包含这个模块。

    【讨论】:

      【解决方案2】:

      如果您希望模型文档的集合保留在其他地方,可以在类级别更改它们。 - http://mongoid.org/en/mongoid/v3/documents.html

      class SocialMedia
        include Mongoid::Document
        field :fans
      end
      
      class Facebook < SocialMedia
        store_in collection: "facebook"
      end
      
      class Instagram < SocialMedia
        store_in collection: "instagram"
      end
      

      或者

      class SocialMedia
        include Mongoid::Document
        field :fans
        store_in collection: model_name.plural
      end
      

      【讨论】:

      • 这在 Mongoid v4 及更高版本中不起作用。 store_in 必须在包含 Mongoid::Document 的类中定义。
      • 他们在 2014 年说你不应该在派生类中调用 store_。 jira.mongodb.org/browse/MONGOID-3538
      猜你喜欢
      • 1970-01-01
      • 2012-04-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-11
      • 1970-01-01
      • 1970-01-01
      • 2012-01-18
      • 2012-03-14
      相关资源
      最近更新 更多