2013-02-01 11 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 

は私の代わりにaccount_idacというフィールドにアカウントIDを保存します。

答えて

1

Mongoid逆が必要とされない場合belongs_toのまたはhas_and_belongs_to_manyアソシエーションのように、「inverse_of」

を使用して関係を任意の名前を使用することができ、次のことを確認します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

これは私の問題に対処していません。私はAccountフィールドを 'ac'ではなく' account'と呼んでいます。したがって、エイリアス機能が必要です。 –

+1

conact.acとcontact.accountで一度に解決したいですか?説明してください。 –

+1

モンゴイドライブラリは、エイリアスフィールド名の機能を提供します。これは、大規模なコレクションを処理する場合には非常に便利です。基本的に、私の質問で最初のシナリオを見ると、私は 'nm'としてコレクションに名前を格納しますが、' name'としてアクセス/クエリします。この機能は、通常のフィールドと埋め込み関連で機能します。参照される関連については、このオプションを設定するための文書化された方法はありません。 –

6

あなたが使用することができます。FOREIGN_KEYはMongoDBのフィールド名を指定します。

belongs_to :account, foreign_key: :ac 

あなたはACCOUNT_IDを使用したい場合は、あなたがそのエイリアスを宣言する必要があります:

alias :account_id :ac 

またはbelongs_toの前にACCOUNT_IDを定義する:

field :account_id, as: :ac 
+0

'foreign_key'は関係の両側に設定する必要があります。 – user1032752

関連する問題