2013-02-01 13 views
11

W poniższym modelu Mongoid, jak ustawić alias pola relacji belongs_to?Aliasing odniesionego pola zależności w 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 

Chcę, aby przechowywać identyfikator konta w polu o nazwie ac zamiast account_id.

Odpowiedz

1

Mongoid pozwala wykorzystać dowolną nazwę dla związku stosując od „inverse_of”

Jeśli nie jest wymagana odwrotna, jak belongs_to lub has_and_belongs_to_many, upewnij się, że: inverse_of => nil jest ustawiony na relacja. Jeśli odwrotność jest potrzebna, najprawdopodobniej odwrotność nie może być ustalona na podstawie nazw relacji i będziesz musiał jednoznacznie powiedzieć Mongoidowi, co to jest odwrotność.

więc do użycia 'ac' jako alias jest to konieczne, aby dodać inverse_of:

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

to nie rozwiązuje mojego problemu. Chcę odnieść się do pola Konto jako "konto" zamiast "ac", stąd potrzeba funkcji aliasu. –

+1

Chcesz adresować przez conact.ac i contact.account na raz? Wytłumacz, proszę. –

+1

Biblioteka mongoidów udostępnia funkcję aliasowania nazw pól. Jest to przydatne, gdy masz do czynienia z kolekcjami o dużych rozmiarach. Zasadniczo, jeśli spojrzysz na pierwszy scenariusz w moim pytaniu, przechowuję nazwę jako 'nm' w kolekcji, ale dostęp/zapytanie to jako' name'. Ta funkcja działa dla zwykłych pól i powiązań osadzonych. Dla powiązania referencyjnego nie ma udokumentowanego sposobu ustawienia tej opcji. –

6

Można użyć: foreign_key podać nazwę pola MongoDB.

belongs_to :account, foreign_key: :ac 

Jednakże, jeśli chcesz używać ACCOUNT_ID, trzeba zadeklarować swój Alias:

alias :account_id :ac 

lub definiowania ACCOUNT_ID przed belongs_to:

field :account_id, as: :ac 
+0

Przycisk "foreign_key" musi być ustawiony po obu stronach relacji. – user1032752