2010-11-25 1 views
1

往復を想定しているときに、特に重複したエントリを作成する必要があるため、私。私は友人として誰かを追加し、私は自動的に== 2つの結合が必要になります。ジョインズテーブル(往復友人関係など)を使用するときの重複の副作用をどのように処理しますか

2人の人を追跡し、何を費やしたかを記録する簡単な領収書アプリを用意しましょう。

ユーザーは複数の友人を持つことができます。各FRIENDについて、複数のTABS(すなわち、食料用のタブ、請求用のタブなど)を追跡することができ、それぞれに複数のRECEIPTSがUSERによって追加されます。

この場合、友人として別のユーザーが宣言したときにジェスチャーが往復すると仮定すると、友人関係を作成する必要があります。ここに私の問題がある。共有TABを友人との両方にリンクする必要があります。これは基本的には

という友情には多くのタブがあり、タブには多くの友情があります。

これには別の結合表が含まれています...そうですか?

これはちょうど重複のように思えますし、あなたがこれを行うより良い方法であるかどうか、またはあなたのコードでこれをどうやってうまく処理するのだろうと思いますか? 1つの友情に何かが行われたことを確認するために、多くのコールバックを作成しますか?

答えて

1

を始め、私は間違っているなら、私を修正...間違っているかもしれない最高の1もっともらしいアプローチであり、そうでない場合:

http://www.dweebd.com/sql/modeling-bidirectional-graph-edges-in-rails/

+0

thats great。私は最後に簡単な解決策を見つけましたが、私は彼のアプローチを試してみました。最後に、私はちょうどタブとユーザーの間の直接の関連を作成しました。とにかくパフォーマンスのために非常に熱くないスルーを通って非常に多くのレベルの深いところへ行くことを試みていると思う。再度、感謝します。 – robodisco

0

私はここで、レール

User 
has_many :friend , :through => friendship 
has_many :tab , :through => friend 

Friendship 
belong_to :user 
belong_to :friend , :foreign_key => "user_id" , class_name => "User" 
+0

これがされあなたの返事のために彼のwizztjhを – wizztjh

+1

を介してネストされた呼び出し。問題はFacebookのスタイルのrelatioshipsです。つまり、私はあなたの友人です。したがって、あなたは私の友人です。これは、しばしば、結合テーブルの重複した行を必要とします。私がそれを言及すると思う友情のrailscastsを点検しなさい。 – robodisco

関連する問題