0

Rails 的新手,并试图找出最“railsy”的方式来实现以下内容。

给出如下:

class Team
  has_many :team_memberships
  has_many :players, through: :team_memberships
end

class TeamMembership
  acts_as_list scope: :team_id
  belongs_to :team
  belongs_to :player
end

class Player
  has_many :team_memberships
  has_many :teams, through: team_memberships
end

在我的 TeamMembership 模型中,我有一个额外的列position:integercaptain:boolean并且wicket_keeper:boolean(你能告诉我我正在做什么...... :))

鉴于以下情况:

t = Team.first
p = Player.first(11)
t.players << p

这很好地用我的玩家对象填充了 TeamMembership 模型。

如果我尝试:

t.players[4][:captain] = true

它失败了-ActiveModel::MissingAttributeError: can't write unknown attribute船长'`

但是,我可以这样设置:

t.team_memberships[4][:captain] = true

但这只是感觉不对。

鉴于您应该看到我想要实现的目标,是这样的:

A) 完成这项任务的最佳方式 - 如果是这样,有没有办法直接通过玩家获取并设置队长属性(如果有意义的话)

或者

B)我是否缺少更好,更“随意”的方法。

4

1 回答 1

0

我相信你所拥有t.team_memberships[4][:captain] = true的是正确的。我这样说是因为您在问题中声明您的TeamMembership模型具有position:integer, captain:boolean, wicket_keeper:boolean. 因此,据我了解,您已经填充了TeamMembership模型。但是有以下情况:t.players[4][:captain] = true您正在尝试访问 Captain 属性。这是TeamMembership模型的一部分,所以我想说的是你试图访问属性Captain,它是实例TeamMembership的一个属性。除此之外,我相信这个错误来自has_many :team_memberships你的播放器类,这是指关联的模型。我认为它在TeamMembership表中寻找 player_id 。请参阅以下链接,它们可能有助于阐明您要执行的操作:

API - Ruby on Rails - belongs_to

指南 Ruby on Rails - Belongs_to_association-reference查看第 4.1.2.6 节:foreign_key

于 2013-06-11T12:13:28.627 回答