2013-02-01 12 views
11

Nel modello Mongoid di seguito, come si alias il campo di relazione belongs_to?Alias ​​di un campo di relazione di riferimento in Mongoide

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 

voglio archiviare l'account ID in un campo chiamato ac invece di account_id.

risposta

1

Mongoid permette di utilizzare nome arbitrario per un rapporto utilizzando dei 'inverse_of'

Se non è richiesto un inverso, come un belongs_to o has_and_belongs_to_many, affinché: inverse_of => nil è impostato sul relazione. Se è necessario l'inverso, molto probabilmente l'inverso non può essere calcolato dai nomi delle relazioni e sarà necessario scrivere a in modo esplicito sulla relazione che è l'inverso.

Così, per l'uso 'ac' come un alias è necessario aggiungere 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

Questo non risolve il mio problema. Voglio fare riferimento al campo Account come 'account' invece di' ac', quindi la necessità della funzione alias. –

+1

Si desidera indirizzare tramite conact.ac e contact.account in una sola volta? Spiega per favore. –

+1

La libreria Mongoid offre una funzionalità per i nomi dei campi di aliasing. Questo è abbastanza utile quando hai a che fare con collezioni di grandi dimensioni. In sostanza, se osservi il primo scenario nella mia domanda, memorizzo il nome come 'nm' nella raccolta ma accedo/chiedo come' nome'. Questa funzionalità funziona per i campi regolari e le associazioni incorporate. Per l'associazione referenziata non esiste un modo documentato per impostare questa opzione. –

6

È possibile utilizzare: foreign_key per specificare il nome del campo MongoDB.

belongs_to :account, foreign_key: :ac 

Tuttavia, se si desidera utilizzare account_id, è necessario dichiarare il suo alias:

alias :account_id :ac 

o account_id definire prima belongs_to:

field :account_id, as: :ac 
+0

Il 'foreign_key' deve essere impostato su entrambi i lati della relazione. – user1032752

Problemi correlati