有没有办法更新多个对象的属性? 我每次更新团队的胜负时,都会尝试更新用户的输赢。
我有三个模型链接在一起。
球员属于球队。我试图做到这一点,以便当用户加入团队时,它会创建一个名字和角色的玩家。
class Player < ActiveRecord::Base
belongs_to :team
end
球队有很多球员。团队名称:字符串获胜:整数损失:整数。
class Team < ActiveRecord::Base
has_many :players, dependent: :destroy
end
用户通过玩家拥有许多团队。因此,用户是他们加入的团队的参与者。在创建新玩家时,用户将他们的名字链接到玩家。用户拥有名称:string email:string wins:integer loss:integer
class User < ActiveRecord::Base
has_many :players, dependent: :destroy
has_many :teams, through: :players
end
所以在这一点上我想做的是,当我更新球队的输赢时,球员也会获得最新的胜负。我怎么解决这个问题?我试图在一个实例变量中加载所有团队用户,但它有多个玩家,我无法从那里更新胜利。
答案 0 :(得分:0)
我不知道您的其他人申请,但根据您的问题,我建议您制作另一个模型Matches
。您可以通过Team
将其与has_many
相关联。然后,您只需向团队添加赢/输比赛并设置模型,以便您可以创建类似
模型应如下所示。如果您希望多个团队播放相同的匹配并保存结果而不重复,则可以更好地设置它们(匹配可以有多个外键,如team1_id
,team2_id
)。或者,如果您还想绘制匹配项,保存分数等。对于您的要求,我只需要包含一个属性won
:
class Team < ActiveRecord::Base
has_many :players, dependent: :destroy
has_many :matches
end
class Match < ActiveRecord::Base
belongs_to :team
def self.won
where(won: true)
end
def self.lost
where(won: false)
end
end
现在这个查询应该有效:
team.matches.won.count
为团队添加匹配应该很简单:
team.matches.create(won: true)