通过团队和inverse_teams进行比赛

时间:2012-07-05 17:13:25

标签: ruby-on-rails-3.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返回直接属于用户的团队的比赛。

我需要的是团队和逆向团队的用户竞赛,而不会显示重复的结果。

如果我需要在这里显示更多代码,请告诉我,请记住这是我的第一个堆栈溢出问题。

非常感谢你的帮助!谢谢!

1 个答案:

答案 0 :(得分:0)

它可能会简化您稍微更改模型的内容。您可以创建用户模型,团队模型和成员模型来连接它们。 每个成员资格属于一个团队和一个用户。用户拥有许多会员资格,团队也有很多会员资格。我认为您可以使用验证将其限制为2。然后,您可以使用“has_many through”直接将团队连接到用户和用户到团队。 这种方法可以让您通过以下方式获得用户的所有比赛:

Competition.joins(teams: {memberships: :users}).where(users: {id: my_user_id})