2013-02-01 54 views
11

在下面的Mongoid模型中,我如何別名belongs_to關係字段?在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 

我想帳戶ID存儲在一個名爲ac而不是account_id領域。

回答

1

Mongoid允許通過使用「inverse_of」

的如果不需要的逆,就像一個belongs_to的或has_and_belongs_to_many使用任意名稱的關係,確保:inverse_of =>零被設置在 關係。如果需要倒數,很可能倒數不能從關係的名字中計算出來,你需要 明確告訴Mongoid關於倒數的關係。

因此,對於使用「交流」的別名有必要添加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

這並沒有解決我的問題。我想將帳戶字段稱爲「帳戶」而不是「ac」,因此需要別名功能。 –

+1

您想要立即通過conact.ac和contact.account解決?請解釋。 –

+1

Mongoid庫提供了一個用於別名字段名稱的功能。這在處理大型集合時非常有用。從本質上講,如果你看看我的問題中的第一個場景,我將名稱作爲'nm'存儲在集合中,但訪問/查詢它爲'name'。此功能適用於常規字段和嵌入式關聯。對於引用的關聯,沒有書面的方式來設置此選項。 –

6

您可以使用:foreign_key指定MongoDB的字段名。

belongs_to :account, foreign_key: :ac 

但是,如果你想使用ACCOUNT_ID,你需要聲明它的別名:

alias :account_id :ac 

或定義ACCOUNT_ID belongs_to的面前:

field :account_id, as: :ac 
+0

'foreign_key'需要在關係的兩邊設置。 – user1032752