帮助Rails中的关联

时间:2011-03-17 09:04:32

标签: ruby-on-rails associations


让我来描述我想做的事情:
有一个比赛模型,应该有关于哪些球员和哪些部族参加比赛的信息,包括主场球员和战队以及客场和战队。 这很简单,但还有另一种模式:召唤师。在每场比赛中,每个球员都有不同的召唤者,我需要做这样的事情:Match.find(1).players_home.find(1).Summoner.name提取哪个召唤者在主队中扮演球员1。 关键是:每场比赛中的每个球员都可以使用不同的召唤者 我希望我能清楚地描述它 问候。

1 个答案:

答案 0 :(得分:1)

我不确定你关于协会何时是一个或几个的所有规范,但我认为这样的事情可能就是这样:

class Match
  has_many :participations
  has_many :players, :through => :participations
end

class Participation
  belongs_to :match
  belongs_to :player
  belongs_to :summoner

  # also a team attribute to store either "home" or "away"
  scope :home, where(:team => "home")
  scope :away, where(:team => "away")
end

class Player
  belongs_to :clan
  has_many :participations
  has_many :matches, :through => :participations
end

class Summoner
  has_many :participations
end

在此设置中,每场比赛都有几次参赛。每次参与都属于参与的玩家,也属于该玩家和比赛的召唤者。然后它可以像这样使用:

在控制器

@match = Match.find(1)
@home_participations = @match.participations.home
@away_participations = @match.participations.away

在视图中

<h1>Home Players</h1>
<% @home_participations.each do |p| %>
  <p>Player: <%= p.player.name %>, Summoned by: <%= p.summoner.name %></p>
<% end %>

我希望这至少与你的目标有关。如果您正在寻找其他内容,请告诉我。