繁体   English   中英

RoR在删除时更新子项的属性

[英]RoR Update attributes of children upon deletion

在我的RoR应用程序中,我有以下关系:一个团队有很多玩家,玩家属于一个团队。

我想要做的是当该玩家的团队被删除时,将玩家的列team_id的值更改为“10”(自由代理)。 这是我的teams模型的样子,哪些不起作用

class Team < ActiveRecord::Base
  has_many :players, :after_remove => :make_free_agents  

  def make_free_agents(player)
    player.update_attribute(:team_id, "0")
  end
end

只有当您从关联集合中添加对象或从对象集合中删除对象时,才会触发关联回调 如果您希望在删除团队后更新播放器的属性,我建议使用Team类上的after_destroy挂钩

class Team < ActiveRecord::Base
  after_destroy :make_free_agents
  has_many :players

  def make_free_agents
    players.update_all(team_id: 0)
  end
end

我团队模型中的以下代码可以解决问题:

class Team < ActiveRecord::Base
  before_destroy { |record| Player.update_all("team_id = '0'", "team_id = #{record.id}")   }
  has_many :players



end

“删除”和“破坏”之间有区别。 如果您实际使用“删除”,则不会运行任何回调。

因此,如果您希望代码以任何一种方式运行,那么最好的选择可能是用SQL编写的触发器。 如果您的数据存储支持它。

否则你自己的解决方案看起来很

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM