关系实体上的属性与多对多的模型关系

时间:2012-12-20 23:38:03

标签: ruby-on-rails ruby

我正在尝试一些非常简单的事情。在这一点上,我有三个模型:

Player >> PlayerMatch >> Match

class Match < ActiveRecord::Base
  attr_accessible :date, :goals_team_a, :goals_team_b
  has_many :PlayerMatches
  has_many :Players, :through => :PlayerMatches
end

class Player < ActiveRecord::Base
  attr_accessible :name, :password_confirmation, :password, :user
  has_many :PlayerMatches
  has_many :matches, :through => :PlayerMatches
end

class PlayerMatch < ActiveRecord::Base
  attr_accessible :match_id, :player_id, :team
  belongs_to :player
  belongs_to :match
end

模型PlayerMatch是连接实体。在玩家参与的每场比赛中,他可以在A队或B队,这就是我在PlayerMatch上创建属性团队的原因。

如何为每场比赛设置价值团队?我想做的事情如下:

p = Player.new
//set players attributes
m = Match.new
//set match attributes

p.matches << m

现在我只是想让他的球队参加那场比赛。

提前致谢!

1 个答案:

答案 0 :(得分:0)

使用您设置的模型,您可以执行以下操作:

p = Player.create
m = Match.create
pm = PlayerMatch.create(:player => p, :match => m, :team => 'Team')

如果您希望在示例中自动创建PlayerMatch,您可以在之后检索它并在此时设置团队:

p = Player.create
m = Match.create
p.matches << m

pm = p.matches.where(:match_id => m.id).first
pm.update_attributes(:team => 'Team')

除非你说个别玩家可以为不同的队伍打不同的比赛,但似乎你可能希望玩家属于一个队伍而不是。

This post也有一些与此问题相关的信息。