2013-02-01 9 views
11

Aşağıdaki Mongoid modelinde, belongs_to ilişki alanını nasıl taklit edebilirim?Mongoid'de başvurulan bir ilişki alanı ile aynı hizalama

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 

yerine account_id ait ac adında bir alanda hesap id saklamak istiyor.

cevap

1

Mongoid ters gerekmiyorsa bir belongs_to veya has_and_belongs_to_many gibi 'inverse_of'

ait kullanarak bir ilişki için keyfi adını kullanmak için izin verir, emin olun: inverse_of => nil ayarlanır ilişkisi. Tersine ihtiyaç duyulursa, büyük olasılıkla tersi ilişkilerin isminden anlaşılan olamaz ve ile Mongoid'e tersin ne olduğu arasındaki ilişkiyi açıkça söyleyeceksiniz.

Yani, bir takma ad olarak kullanılması 'ac' için inverse_of eklemek için gerekli:

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

Bu benim sorunu çözmek değil. Hesap alanına "ac" yerine "hesap", dolayısıyla takma adın gerekliliğine başvurmak istiyorum. –

+1

conact.ac ve contact.account adresinden bir defada adres vermek mi istiyorsunuz? Açıkla lütfen. –

+1

Moğol kütüphanesi, alan adlarını taklit etmek için bir özellik sağlar. Büyük boyutlu koleksiyonlarla uğraşırken bu oldukça kullanışlıdır. Esasen, sorgumdaki ilk senaryoya bakarsanız, koleksiyondaki ismi 'nm' olarak kaydederim, ancak 'name' olarak sorgula/sorgula. Bu özellik düzenli alanlar ve gömülü ilişkilendirmeler için çalışır. Başvurulan ilişki için bu seçeneği ayarlamanın belgelenmiş bir yolu yoktur. –

6

Sen kullanabilirsiniz: foreign_key mongodb alan adını belirtmek için.

alias :account_id :ac 

veya tanımlayan ACCOUNT_ID belongs_to önce: Eğer ACCOUNT_ID kullanmak istiyorsanız

belongs_to :account, foreign_key: :ac 

Ancak, onun takma adı beyan etmek gerek

field :account_id, as: :ac 
+0

'foreign_key' ilişkinin her iki tarafına da ayarlanmalıdır. – user1032752