
[英]Rails Nested Attributes destroy some children attributes and update some others
[英]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.