邁向 Rails 高級新手

has_many :through

has_many :through主要是在建立多對多關聯資料庫的時候使用。

例如一個球隊可以有很多球員,一個球員可以參加很多球隊,這個就是多對多關係。在這裏球員跟球隊都是一個model,要建立多對多關係時我們會需要第三個model扮演連接的橋樑。第三個Model就是體育協會,負責登記每個球員所屬的球隊以及球隊目前的成員。如此一來我們就可以從體育協會得知每個球隊和球員的狀況(所以叫作through)。

所以球員throuth體育協會has_many球隊,舉例:

model/player.rb

class Player < ActiveRecord::Base
    # 先告訴model我們在體育協會有很多筆資料
    has_many :sports_associations
  # 這些資料是要拿來判斷這個球員有參與多少球隊
    has_many :teams, :through => :sports_associations
end

model/team.rb

class Team < ActiveRecord::Base
    has_many :sports_associations
    has_many :players, :through => :sports_associations
end

model/sports_associations.rb

class SportsAssociations < ActiveRecord::Base
    #體育協會要對球員和球隊負責,所以體育球隊belongs_to球員和球隊
    belongs_to :team
    belongs_to :player
end