7-2 has_many :through 解说

可以花时间解释一下什么是 has_many :through 吗?

has_many :through

has_many :through主要是在建立多对多关联资料库的时候使用。

例如一个“球队”可以有很多“球员”,一个“球员”可以参加很多“球队”,这个就是多对多关系。

在这里球员跟球队都是一个 Model,要建立多对多关系时我们会需要第三个 Model扮演连接的桥梁。

第三个 Model 就是“体育协会”,负责登记每个球员所属的球队以及球队目前的成员。如此一来我们就可以从体育协会得知每个球队和球员的状况(所以叫作“through”)。

所以“球员”throuth“体育协会”has_many“球队”,举例:

models/player.rb

ruby
class Player < ActiveRecord::Base
    # 先告诉model我们在体育协会有很多笔资料
    has_many :sports_associations
  # 这些资料是要拿来判断这个球员有参与多少球队
    has_many :teams, :through => :sports_associations
end

models/team.rb

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

models/sports_associations.rb

ruby
class SportsAssociations < ActiveRecord::Base
    #体育协会要对球员和球队负责,所以体育球队belongs_to球员和球队
    belongs_to :team
    belongs_to :player
end