Ruby on rails 你与干预模式有过很多关系吗
刚接触rails,并试图找出最“railsy”的方式来实现以下内容 如下所示:Ruby on rails 你与干预模式有过很多关系吗,ruby-on-rails,activerecord,has-many-through,Ruby On Rails,Activerecord,Has Many Through,刚接触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_m
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
在我的团队成员模型中,我有一个额外的列位置:整数
,队长:布尔
和wicket_keeper:布尔
(你能告诉我正在做什么吗…:)
鉴于以下情况:
t = Team.first
p = Player.first(11)
t.players << p
由于-ActiveModel::MissingAttributeError:无法写入未知属性而失败
captain'`
但是,我可以这样设置:
t.team_memberships[4][:captain] = true
但这感觉不对
鉴于你应该看到我正在努力实现的目标,这是:
A) 完成此任务的最佳方法-如果是,是否有方法直接通过玩家获得并设置队长属性(如果有意义的话)
或
B) 有没有一种更好的、更“粗暴”的方法,我不知道。我相信你所拥有的
t团队成员身份[4][:captain]=true
是正确的。我这样说是因为您在问题中指出,您的团队成员模型具有位置:integer
,队长:boolean
,wicket\u keeper:boolean
。据我所知,您已经填充了TeamMembership模型。但是,使用以下命令:t.players[4][:captain]=true
您正在尝试访问captain属性。这是TeamMembership模型的一部分,所以我想说的是,您试图访问属性captain,它是实例TeamMembership的一个属性。除此之外,我相信这个错误来自于玩家类中的有很多:团队成员身份,这是指相关的模型。我想这是在团队成员表中寻找球员id。请参阅以下链接,它们可能有助于澄清您正在尝试做什么:
看一看第4.1.2.6节:外键谢谢你的回答-但是,我知道为什么通过团队成员身份
建立的联系正在发挥作用-我希望有更好的方式来定义团队成员关系…将阅读链接,尽管我已经浏览过几次了!!
t.team_memberships[4][:captain] = true