0

ご覧いただきありがとうございます。ここで完全な初心者。ごめん!

私は、2 人のユーザーを持つチームをセットアップするための自己参照型の関連付けと、チームによる競争を行っています。

class User < ActiveRecord::Base
  has_many :teams, :dependent => :destroy
  has_many :inverse_teams, :class_name => "Team", :foreign_key => "team_mate_id"
  has_many :competitions, :through => :teams
end

user.competitions のようなものを使用したいのですが、これは team.user_id を介してユーザーに直接属しているチームの競技のみを返します。

私が必要としているのは、重複した結果を表示することなく、チームと逆チームのユーザー競争です。

4

1 に答える 1

0

モデルを少し変更すると、物事が簡単になる場合があります。ユーザー モデル、チーム モデル、およびメンバーシップ モデルを作成して、それらを接続することができます。各メンバーシップは、1 つのチームと 1 人のユーザーに属します。ユーザーには多くのメンバーシップがあり、チームにも多くのメンバーシップがあります。検証を使用して2つに制限できると思います。次に、「has_many through」を使用して、チームをユーザーに、ユーザーをチームに直接接続できます。このアプローチにより、次のようなユーザーのすべての競合を取得できます。

Competition.joins(teams: {memberships: :users}).where(users: {id: my_user_id})
于 2012-07-05T21:17:51.790 に答える