对rails很新,并试图找出最“实用”的方式来实现以下目标。
如下所示:
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:integer
,captain: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)我缺少一种更好,更“顽固”的方法。
答案 0 :(得分:0)
我相信你所拥有的t.team_memberships[4][:captain] = true
是正确的。我这样说是因为您在问题中声明您的 TeamMembership 模型有position:integer
,captain:boolean
,wicket_keeper:boolean
。因此,根据我的理解,您已经填充了 TeamMembership 模型。但是,使用以下内容:t.players[4][:captain] = true
您正在尝试访问captain属性。哪个是 TeamMembership 模型的一部分,所以我想说的是您尝试访问属性队长哪个实例的属性 TeamMembership 。除此之外,我认为此错误来自您在 Player 类中的has_many :team_memberships
,这指的是相关模型。我认为它在 TeamMembership 表中寻找player_id。请参阅以下链接,它们可能有助于阐明您要执行的操作:
API - Ruby on Rails - belongs_to
Guide Ruby on Rails - Belongs_to_association-reference查看4.1.2.6节:foreign_key