2012-02-17 47 views
0

我有3個型號。在Rails中有三個多對多的關係,如果有其他兩個,我怎麼能找到一個?

class Team < ActiveRecord::Base 
    ... 
    has_many :seasons_teams, :dependent => :destroy       
    has_many :seasons, :through => :seasons_teams 
    has_and_belongs_to_many :players 
    ... 
end 

class Season < ActiveRecord::Base 
    ... 
    has_many :players_seasons, :dependent => :destroy 
    has_many :players, :through => :players_seasons 
    has_many :seasons_teams, :dependent => :destroy 
    has_many :teams, :through => :seasons_teams 
    ... 
end 

class Player < ActiveRecord::Base 
    ... 
    has_many :players_seasons, :dependent => :destroy 
    has_many :seasons, :through => :players_seasons 
    has_and_belongs_to_many :teams 
    ... 
end 

將會進行驗證,以便任何給定的玩家每個賽季最多隻能有一個球隊。

我正在尋找一種有效的方式來獲得一個玩家團隊對於任何給定的季節,即:

@player.team(@season) 

謝謝!

回答

1

我覺得這樣的事情應該工作:

@player.teams.joins(:seasons).where(:season_id => @season.id).first 

爲了得到你要找的,你會在一個範圍內使用它漂亮簡潔的語法,如:

class Team < ActiveRecord::Base 
    scope :for_season, lambda do |season| 
    joins(:seasons).where(:season_id => season.id) 
    end 
    # ... 
end 

class Player < ActiveRecord::Base 
    # ... 

    def team season 
    teams.for_season(season).first 
    end 
end 

@player.team @season 
# => #<Team:0x...> 
+0

這讓'的ActiveRecord :: StatementInvalid:PGError:錯誤:缺少FROM子句條目表 「季節」',但以下工作:'加入(:賽季)。凡( 'season_id =?',season.id)' – jsteiner 2012-02-18 01:18:49

+0

好的。我已經更新了我的答案。 – 2012-02-20 14:04:13

0
@player.teams.find_by_season_id(@season.id) 
+0

未定義的方法'find_by_season_id'for []:ActiveRecord :: Relation – jsteiner 2012-02-18 01:11:22

0

看起來你在團隊課上有錯字或錯誤。我想你應該有:

has_many :seasons, :through => :seasons_teams 
+0

是的,那是一個錯字。謝謝! – jsteiner 2012-02-18 21:39:22

相關問題