2013-02-01 5 views
11

Wie aliasne ich im Mongoid-Modell das Beziehungsfeld belongs_to?Aliasing eines referenzierten Beziehungsfelds in Mongoid

class Contact 
    field :nm, :as => :name, :type => String # field aliasing 
    embeds_one :address, :store_as => :ad # embedded document aliasing 
    belongs_to :account # referenced relation doesn't support store_as 
end 

Ich möchte das Konto-ID in einem Feld ac statt account_id genannt speichern.

Antwort

1

Mongoid ermöglicht eine Beziehung beliebige Namen zu verwenden, durch die Verwendung von ‚inverse_of‘

Wenn ein inversen nicht erforderlich ist, wie ein belongs_to oder has_and_belongs_to_many sicher: inverse_of => nil auf die gesetzt Beziehung. Wenn die Umkehrung benötigt wird, kann höchstwahrscheinlich die Inverse nicht aus den Namen der Relationen herausgefunden werden, und Sie müssen explizit Mongoid über die Relation sagen, was die Umkehrung ist.

Also, für 'ac' als Alias ​​ist es notwendig, inverse_of hinzuzufügen:

class Contact 
    field :nm, :as => :name, :type => String # field aliasing 
    embeds_one :address, :store_as => :ad # embedded document aliasing 
    belongs_to :ac, class_name: 'Account', inverse_of: :contact 
end 

class Account 
    has_one :contact, class_name: 'Contact', inverse_of: :ac 
end 
+0

Das ist nicht mein Problem nicht ansprechen. Ich möchte auf das Account-Feld als "account" statt "ac" verweisen, daher die Notwendigkeit für das Alias-Feature. –

+1

Sie möchten sofort mit conact.ac und contact.account ansprechen? Erkläre bitte. –

+1

Mongoid-Bibliothek bietet eine Funktion für Alias-Feldnamen. Dies ist sehr nützlich, wenn Sie mit großen Sammlungen arbeiten. Im Wesentlichen, wenn Sie das erste Szenario in meiner Frage betrachten, speicher ich den Namen als "nm" in der Sammlung, aber zugreifen/abfragen als 'name'. Diese Funktion funktioniert für reguläre Felder und eingebettete Zuordnungen. Für die referenzierte Verknüpfung gibt es keine dokumentierte Möglichkeit, diese Option festzulegen. –

6

Sie verwenden können: foreign_key die mongodb Feldnamen angeben.

belongs_to :account, foreign_key: :ac 

Wenn Sie jedoch verwenden account_id möchten, müssen Sie den Alias ​​deklarieren:

alias :account_id :ac 

oder definieren account_id vor belongs_to:

field :account_id, as: :ac 
+0

Der 'foreign_key' muss auf beiden Seiten der Relation gesetzt werden. – user1032752