我試圖找到爲團隊/成員/人員定義模型的最佳方式,其中一個人可以成爲許多團隊的成員,並且團隊可以有許多成員。與「成員」關係一起是該人爲團隊填補的位置。一支球隊也應該有一名主教練和一名助理教練。一個人可以成爲不止一個團隊的頭部/助理教練。使用Rails與has_many進行正確建模:through和belongs_to
下面是我目前(徒勞的)嘗試:
class Team < ActiveRecord::Base
has_many :members
has_many :people, :through => :members
belongs_to :head_coach :class => 'Person'
belongs_to :assistant_coach :class => 'Person'
end
class Person < ActiveRecord::Base
has_many :teams
has_many :teams, :through => :members
end
class Member < ActiveRecord::Base
belongs_to :team
belongs_to :person
# has a "position" which is a string
end
這種做法引起了我兩個問題:
團隊的belongs_to的:head_coach和:assistant_coach不起作用。也許它應該是一個has_one,但是我不確定將belongs_to放在Person中是否有意義(我想要Team中的FK到Person)。下面的例子表明,我怎麼把它建立不合拍用ActiveRecord:
irb(main):006:0> t = Team.find(1) => #<Team id: 1, name: "Champs", created_at: "2011-07-18 01:50:56", updated_at: "2011-07-19 01:47:26", head_coach: nil> irb(main):007:0> t.head_coach => nil irb(main):008:0> t.head_coach = Person.find(1) => #<Person id: 1, name: "Chris", created_at: "2011-07-18 01:52:34", updated_at: "2011-07-18 01:52:34"> irb(main):009:0> t.save => true irb(main):010:0> t.head_coach => #<Person id: 1, name: "Chris", created_at: "2011-07-18 01:52:34", updated_at: "2011-07-18 01:52:34"> irb(main):011:0> Team.find(1).head_coach => nil
的的has_many:通過似乎工作,但我還沒有找到一個很好的方式列出每個人的位置在一個團隊內。這是在一個視圖中我目前的嘗試:
<% @team.people.each do |person| %> <%= person.name +" "+ @team.members.find_by_person_id(person).position %>
是否有代表這些關係的整體更好的方法?
感謝您的幫助!
克里斯
感謝您的建議。關於第一部分,我打算擴大規模,以便它還會有更多(「n」)角色,比如投球教練,擊球教練,基地教練,經理等......我喜歡範圍建議,但我想知道如果我結束了許多不同的角色將如何擴展? – krsyoung