2010-12-09 16 views
2

Weiß jemand, ob Mongoid Unterstützung für Alias-Feldnamen eingebaut hat? Ich habe einige Tests durchgeführt, wo ich eine Sammlung mit einer minimalen Anzahl von Feldern (7 Felder) habe. Wenn ich beschreibende Namen verwende und echte Daten lade und dann stark verkürzte Namen benutze und dieselben realen Daten lade, sehe ich eine 40% ige Reduktion der Gesamtgröße meiner Sammlung. Beim Betrachten anderer Treiber für MongoDB (nicht Ruby) sehe ich, dass einige von ihnen Unterstützung eingebaut haben, wo Sie Code gegen einen beschreibenden Namen schreiben können, aber die Persistenz ist schlau genug, Entwickler-definierte Aliase zu verwenden. Ich versuche nur herauszufinden, ob Mongoid etwas Ähnliches hat.Feld-Aliasing in Mongoid

Antwort

0

Folgendes muss eigentlich auch für das Bestehen eines Hash zu neuen oder update_attributes aufgenommen werden:

alias :filtered_process :process 

    def process(attrs = nil) 
    attrs[:fn] = attrs[:first_name] unless attrs.nil? 
    filtered_process(attrs) 
    end 

Dies ermöglicht dem Alias ​​in das Feld der Anrufe erstellen oder zu aktualisieren abgebildet werden. Es wäre trivial, dann Alias ​​zu Feldzuordnungen zu verfolgen, um diesen Prozess zu abstrahieren.

+0

Dies ist nicht der beste Weg, es zu tun, finden Sie in der Antwort von z3cko als die Ruby Alias ​​fügt einen anderen Methodennamen hinzu, wenn Mongoid bereits eine Möglichkeit hat, dies zu tun. –

0

Nach this answer, sollten Sie in der Lage sein, nur alias verwenden wie folgt aus:

class Foo 
    include Mongoid::Document 

    field :fn, :type => String 
    alias :first_name :fn 
end 

Beachten Sie, dass dies nicht im Stich lassen den Alias ​​in Abfragen verwenden und einige Fehler verursachen können. Es sollte für die einfache Verwendung in Instanzmethoden und -ansichten geeignet sein.