2017-12-27 13 views
0

rails/mongoidを使用して私のモデルの動的クラスを作成します。レコードにアクセスするたびに、関連する特定のレコード(belongs_to、has_one)を自動的にインクルードする必要があります。したがって、これらの関連付けをすべてas_json関数に含める必要があります。関連のリレーションシップを取得

メソッド 'associations'を使用すると、関連するすべてのモデルが表示されますが、含める結合のタイプのみをフィルタリングする必要があります(has_manyアソシエーションを含めると、時間がかかるデータベースリクエストが発生します。データ)。関連付けメソッドの出力をフィルタリングして、必要な関連付けのみを取得するにはどうすればよいですか?

私はすべての関連付けをループしようとした:

協会: エンティティ {:

def as_json(options={}) 
    selected_associations=[] 
    associations.each do |ass| 
     puts "Association:: ", ass, ass=>relation 
     if association=='Belongs_To'  # Need the right instruction here 
     selected_associations.push(ass) 
     end 
    end 
    attrs = super(:include => selected_associations) 

    end 

プットがコンソールに出力次の各関連付けのために私を提供し(エンティティは一つのモデルである)の関係= > Mongoid ::リレーションシップ::参照::多数、:extend => nil、:inverse_class_name => "WSAEntity"、:name => "entities"、:class_name => "WSAEntity"、:validate => true}

':relation => ...'を評価するにはどうすればよいですか?属性を使用して、必要な関連付けのタイプを選択し、上記のコードを修正できます。または、すべてのフィルタリングされた関連付けを使用して配列を取得するさらに良い方法がありますか?

おかげで、 マイケル

答えて

1

はこれを試してみてください:

associations.each do |key, value| 
    ... 
    if value.macro == :belongs_to  # OR you can do `value.relation == Mongoid::Relations::Referenced::In` 
    selected_associations.push(key) # OR `value`, you need to decide what you need here 
    end 
end 

keyは、ここでは、例えばアソシエーションの名前です"ユーザー"。

valueは次のようなものになります:グレート

#<Mongoid::Relations::Metadata 
autobuild: false 
class_name: User 
cyclic:  nil 
counter_cache:false 
dependent: nil 
inverse_of: nil 
key:   user_id 
macro:  belongs_to 
name:   user 
order:  nil 
polymorphic: false 
relation:  Mongoid::Relations::Referenced::In 
setter:  user= 
versioned: false> 
+0

を!これは私の期待通りに機能します!ありがとう、マイケル –

関連する問題