在我的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
答案 0 :(得分:1)
Association callbacks仅在“从关联集合中添加对象或从对象集合中删除对象时”触发。如果您希望在删除团队后更新玩家的属性,我建议您改用Team类的after_destroy
hook。
class Team < ActiveRecord::Base
after_destroy :make_free_agents
has_many :players
def make_free_agents
players.update_all(team_id: 0)
end
end
答案 1 :(得分:1)
我团队模型中的以下代码可以解决问题:
class Team < ActiveRecord::Base
before_destroy { |record| Player.update_all("team_id = '0'", "team_id = #{record.id}") }
has_many :players
end
答案 2 :(得分:0)
“删除”和“破坏”之间存在区别。如果您实际使用“删除”,则不会运行任何回调。
因此,如果您希望代码以任何一种方式运行,那么最好的选择可能是用SQL编写的触发器。如果您的数据存储支持它。
否则你自己的解决方案看起来很好。