[英]Updating attributes on multiple objects at once
有没有一种方法可以更新多个对象上的属性? 每当他们的团队的得失更新时,我都在尝试更新用户的得失。
我将三个模型链接在一起。
玩家属于团队。 我正在努力做到这一点,以便当用户加入团队时,它将创建具有其姓名和角色的玩家。
class Player < ActiveRecord::Base
belongs_to :team
end
球队有很多球员。 球队持有姓名:字符串胜利:整数损失:整数。
class Team < ActiveRecord::Base
has_many :players, dependent: :destroy
end
用户通过玩家拥有许多团队。 因此,用户是他们加入的团队的参与者。 创建新玩家时,用户会将其姓名链接到玩家。 用户持有姓名:字符串电子邮件:字符串获胜:整数丢失:整数
class User < ActiveRecord::Base
has_many :players, dependent: :destroy
has_many :teams, through: :players
end
所以在这一点上,我想做的是,当我更新一支球队的胜负时,玩家也将获得这些胜负的最新信息。 我该如何解决? 我曾尝试将所有团队的用户加载到一个实例变量中,但它有多个玩家,因此我无法从那里更新胜利。
我不了解您的其余应用程序,但是根据您的问题,我建议您制作另一个模型Matches
。 您可以通过has_many
将其连接到Team
。 然后,您可以简单地向团队添加获胜/失败的比赛并设置模型,以便创建类似
模型应如下所示。 如果希望多个团队进行相同的比赛并保存结果而不重复,则可以更好地进行设置(比赛可以有多个外键,例如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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.