2011-01-18 19 views
5

私はエンティティモデルを持っており、エンティティ間の接続を表示したいと思います。つまりエンティティ1はエンティティ2に接続されています。Rails 3の自己参照モデル

私は現在、Connectionという2つのモデルの間にジョインモデルを作成し、従来のレールジョインテーブルのように動作させることを考えています。列がentity_one_idとentity_two_idであることを除いて、EntityとConnectionの間に多対多の関係を確立します。

これはこれを行うには本当にエレガントな方法のようです。誰かがもっと良いアイデアを持っているのだろうかと思いましたか?たぶん私は見ていないより多くのレール - エスクなものでしょうか?

答えて

8

これが最も一般的な方法です。エンティティが1つの他のモデルにしか接続されていない場合は、リンクされたツリー状の構造を使用できます。

チェックアウトRyan Bates' Railscast on self-joining modelsそれは、ソーシャル・ネットワークのようなシステムを扱うが、それはまだあなたはこの実装に使用でき

1

偉大な出発点あなたが必要とする原則を持っており、提供:

class User < ActiveRecord::Base 
    has_many :friends, :through => :friendships, :conditions => "status = 'accepted'" 
    has_many :requested_friends, :through => :friendships, :source => :friend, :conditions => "status = 'requested'", :order => :created_at 
    has_many :pending_friends, :through => :friendships, :source => :friend, :conditions => "status = 'pending'", :order => :created_at 
    has_many :friendships, :dependent => :destroy 
end 


class Friendship < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :friend, :class_name => "User" 
end 
+3

あなたはライアンのRailscastから盗んだの実装を? :) – sethvargo

+3

確かに私はそれを選んだ場所を覚えていませんでしたが、あなたは間違いなく正しいです:) – apneadiving