2011-12-18 1 views
0

私はそうのような友情のモデルがあります:ユーザーAとユーザーBにuser_idの間の友情を確立するための唯一の1レコードはfriend_idに開始したユーザーが存在している場合はRails、等しいフィールドが2つある場合の友だちモデルのクエリ方法:user_id&friend_id?

Friendship (user_id, friend_id, status) 

を。作成時にステータスは「保留中」です。 friend_idが承認または無視すると、そのステータスが更新されます。

関係を示します。ユーザーの連絡先をすべて取得するにはどうすればよいですか?クエリはuser_idとfriend_idの両方でクエリを実行する必要があります。そのため、@ user.friendshipsは機能しません。それは、作成した友人だけを示しています。

アイデア?

+1

この問題を解決するために、両方の列にクエリを実行するスコープを作成します。 –

答えて

0

私は人々の間の関係の系譜を維持する必要があるレールアプリを構築しました。私がしたのは、すべての関係のための等しく反対の地図を作成することでした。 after_create,after_updateおよびafter_destroyトリガーを使用して、[a、b、father]、[b、a、son]私がこれをした理由は、人から人への非常に速い検索を望んでいたからです。よく働く。

作成するコードは次のようになります。

Relationshipオブジェクトは、あなたの Friendshipオブジェクトと同じであり、この場合、 recordが人である
def after_create(record) 
    if ! record.relative.has_relative(record.person_id) 
    new_relationship = Relationship.new(:relative => record.person, 
     :relationship => hantai(record.relative.gender, record.person.gender, record.relationship)) 
    record.relative.relationships << new_relationship 
    record.relative.save 
    end 
end 

+0

このアプローチの欠点は、両方の行で 'status'値が同じであることを確認する必要があることです。 –

関連する問題