0

在我的 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
4

3 回答 3

1

我的团队模型中的以下代码起到了作用:

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



end
于 2012-04-30T18:28:17.080 回答
1

关联回调仅在“向关联集合中添加对象或从关联集合中删除对象时”触发。如果您希望在删除团队后更新玩家的属性,我建议您使用 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
于 2012-04-30T18:02:18.823 回答
0

“删除”和“销毁”是有区别的。如果您实际使用“删除”,则不会运行回调。

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

否则,您自己的解决方案看起来不错。

于 2012-04-30T19:05:47.037 回答