2012-03-15 10 views
8

Ho letto fino all'eredità in mongoid e sembra che tutte le classi ereditate salveranno nella classe base, ad es.Salvare l'oggetto ereditato per separare la raccolta in Mongoide

class BaseClass 
end 

class ChildClass1 < BaseClass 
end 

class ChildClass2 < BaseClass 
end 

Sembra che tutti questi negozi nella raccolta BaseClass.

In realtà desidero che vengano archiviati in raccolte separate, ad es. ChildClass1 - collection e ChildClass2 - collection.

+0

In base alla discussione su questo argomento (https://github.com/mongoid/mongoid/issues/1133), suppongo che non sia possibile memorizzare sottoclassi in raccolte separate. Puoi andare con mixin invece di ereditarietà come suggerisce Durran in questo numero. –

+0

C'è qualche problema con l'utilizzo di questo: self.collection_name = "account"? Ovviamente il mio obiettivo è di mantenere piccole le mie collezioni. E 'comunque una buona idea? – Boenne

+0

Ho trovato la buona risposta qui http://stackoverflow.com/questions/10704310/mongoid-store-in-produces-random-results – Arugin

risposta

3

È impossibile farlo. Perché è il concetto della STI In Mongoid come explain by Durran the Mongoid creator

Se davvero si vuole salvare in diversi raccolta è necessario utilizzare il modulo comprendono come:

class BaseClass 
    include MyModule 
end 

class ChildClass1 
    include MyModule 
end 

class ChildClass2 
    include MyModule 
end 
+0

Grazie, è un buon input. Che dire di questo? self.collection_name = "account"? c'è qualche cattura? – Boenne

+1

è necessario utilizzare il metodo di classe 'store_in' per definire in quale raccolta si desidera salvare il proprio oggetto – shingara

4

Mi rendo conto che è stato pubblicato un anno fa, ma questo potrebbe essere quello che stavi cercando:

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

si prega di provare questo approccio:

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 

Lo faccio nella mia app Rails 5 e funziona di sicuro.

Problemi correlati