0

次のエンティティがあります。

  • ユーザー
  • 会社
  • 組織

ユーザーは、ユーザー、会社、組織、および将来のパーティ オブジェクトをフレンド リストに追加できる必要があります。

私の最初のアイデアは、友人とのポリモーフィックな関係を持つ Friendship オブジェクトを次のように使用することでした。

簡素化されたフレンドシップ スキーマ:

  • ユーザーID
  • friendable_id
  • フレンドリータイプ
ユーザー
- has_many :businesses, :through => :friendships, :conditions => ['friendable_type=?', 'Business'], :source => :friendable

私の問題は、Ruby on Rails ActiveRecord が、結合テーブルなどのポリモーフィックな関係を介した関係を介して has_many をサポートしていないことです。

最後に、以下のように、すべてのタイプ、特定のタイプなどの友達のリストを取得するために反復できる単一の結合テーブルが必要です。

ジョン = User.find(5)
john.friendships.map {|友情| 友情.友好的な}
john.businesses (has_many :企業のみを対象とする)
john.organizations (has_many : 組織のみを対象とする)

User、Business、および Organization を一般的な Party クラスから継承し、関連付けを基本の Party クラスにポイントすることを検討しましたが、ORM のコンテキストでは、たくさんのジャンク フィールドが発生し、汚いように見えます。

私が知りたいのは、このエラーを回避しながら、ActiveRecordを使用して共通の結合テーブルを介して同様のオブジェクトとの1対多の関係を作成したい場合に、他の人がこのような状況にどのようにアプローチするかです:)

has_many :ポリモーフィック オブジェクト 'Friendship#friendable' の関連付け 'User#businesses' を使用することはできません。

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

ありがとう!

4

2 に答える 2

0

:through を使用しないでください。ポリモーフィックな has_many 関係では、代わりに :as=>friendable を使用してください

于 2009-08-12T19:34:06.063 に答える