2009-08-12 13 views
0

私は次のエンティティを持っている:異なるエンティティでユーザーの「友情」をモデル化する最良の方法は?

  • ユーザー
  • 会社
  • 組織

ユーザーが自分の友達リストにユーザー、企業、組織、および今後の党のオブジェクトを追加できるようにする必要があります。

私のオリジナルのアイデアはそうのような友人へのポリモーフィックな関係を友好オブジェクトを使用して関与:

簡体友情スキーマ:friendable_id

    • のuser_id
    • friendable_type
     
    User 
    - has_many :businesses, :through => :friendships, :conditions => ['friendable_type=?', 'Business'], :source => :friendable 
    

    私の問題は、Ruby on RailsのActiveRecordは、joinテーブルなどの多態的な関係を介してhas_many関係をサポートしていないことです。以下のような

    など私は、すべてのタイプの友人のリストを取得して、特定の種類を繰り返すことができるように、単一の結合テーブルを持つようにしたい最後に

    、:

     
    john = User.find(5) 
    john.friendships.map {|friendship| friendship.friendable } 
    john.businesses (has_many :through scoped to only the businesses) 
    john.organizations (has_many :through scoped only to the organizations) 
    

    私が考えられてきましたユーザー、ビジネス、および組織を一般的なPartyクラスから継承させ、その関連付けを基本Partyクラスにポイントさせるが、ORMのコンテキストでは複数のジャンクフィールドにつながり、ちょうど汚れているように見える。私が知りたいのですがどのような

    は、他の人がこのエラーを回避しながら、あなたが共通を通じて類似したオブジェクトに1対多の関係を作成したい、このような状況は、ActiveRecordのを使用してテーブルを結合するアプローチする方法を次のとおりです:)

    Cannot have a has_many :through association 'User#businesses' on the polymorphic object 'Friendship#friendable'.

    アドバイスをいただければ幸いです。

    ありがとうございます!

  • 答えて

    0

    にそれはRailsのプラグイン「has_many_polymorphs」ことが表示されます私がしたい正確に何を行うことができます。私のUserモデルに次の行を追加し

    http://github.com/fauna/has_many_polymorphs/tree/master

    は私が望んでいた機能を与えた:ここ

     
    has_many_polymorphs :friendables, :from => [:businesses, :organizations], :through => :friendships 
    
    0

    は使用しないでください:使用により:=と> friendable代わりに多型にhas_many関係

    +0

    をポリモーフィック団体を探して、リンクされている http://api.rubyonrails.org/クラス/ ActiveRecord/Associations/ClassMethods.html –

    +0

    私はそれを考えましたが、友人の役割が必要です。つまり、私は結合テーブルが必要です。 – rwl4

    関連する問題