2012-03-15 10 views
8

He leído para heredar en mongoid y parece que todas las clases heredadas se guardarán en la clase base, p.Guardar el objeto heredado para separar la colección en Mongoid

class BaseClass 
end 

class ChildClass1 < BaseClass 
end 

class ChildClass2 < BaseClass 
end 

Parece que todas estas tiendas en la colección BaseClass.

De hecho, quiero que se almacenen en colecciones separadas, p. ChildClass1 - collection y ChildClass2 - collection.

+0

De acuerdo con el debate sobre [este] (https://github.com/mongoid/mongoid/issues/1133) problema, supongo que no hay forma de almacenar subclases en colecciones separadas. Puedes ir con mixins en lugar de herencia, como durran sugiere en este número. –

+0

¿Hay algún problema con el uso de esto: self.collection_name = "account"? Obviamente, mi objetivo es mantener mis colecciones pequeñas. ¿Es eso una buena idea de todos modos? – Boenne

+0

Encontré la buena respuesta aquí http://stackoverflow.com/questions/10704310/mongoid-store-in-produces-random-results – Arugin

Respuesta

3

Es imposible hacer eso. Debido a que es el concepto de la ITS En Mongoid como explain by Durran the Mongoid creator

Si realmente quieres ahorrar en varios colección que necesita utilizar el módulo incluirá como:

class BaseClass 
    include MyModule 
end 

class ChildClass1 
    include MyModule 
end 

class ChildClass2 
    include MyModule 
end 
+0

Gracias, eso es una buena entrada. ¿Qué hay de esto? self.collection_name = "cuenta"? hay alguna trampa? – Boenne

+1

necesita usar el método de clase 'store_in' para definir en qué colección desea guardar su objeto – shingara

4

Me di cuenta que fue publicada hace más de un año, pero esto podría ser lo que estaba buscando:

class BaseClass 
    include Mongoid::Document 
    def self.inherited(subclass) 
    super 
    subclass.store_in subclass.to_s.tableize 
    end 
end 

class ChildClass1 < BaseClass 
end 

class ChildClass2 < BaseClass 
end 
0

por favor, intente este enfoque:

module Base 
    extend ActiveSupport::Concern 

    include Mongoid::Document 
    include Mongoid::Timestamps 

    included do 
    # Common code goes here. 
    end 
end 

class ChildClass1 
    include Base 
end 

class ChildClass2 
    include Base 
end 

Hago esto en mi aplicación Rails 5 y funciona con seguridad.

Cuestiones relacionadas