0

我有两个模型:团队赛季关联,这样一个团队可以属于多个赛季,每个赛季也可以有多个团队。到目前为止,我已经使用了一个没有 ID 属性的连接表 seasons_teams 模型之间的简单 HABTM 关系。

现在我想添加一个关联被删除时的钩子,当球队退出赛季时执行。最好的方法是将 HABTM 关联转换为 has_many / :trough,将 ID 属性添加到连接表并创建包含新 before_destroy 钩子的相应模型文件,这是否正确?如果是这样,我如何编写迁移以向我的联接表添加自动递增索引?(或者创建一个带有索引的新连接表/模型并复制现有表中的所有条目会更好)

4

2 回答 2

3

遵循Rails 样式指南

更喜欢 has_many :through 到 has_and_belongs_to_many。使用 has_many :through允许连接模型上的附加属性验证

在你的情况下:

class SeasonTeam < ActiveRecord::Base # couldn't find a better name...
  belongs_to :team
  belongs_to :season
  # the validates are not mandatory but with it you make sure this model is always a link between a Season and a Team
  validates :team_id, :presence => true
  validates :season_id, :presence => true

  before_destroy :do_some_magic

  #...      
end

class Season < ActiveRecord::Base
  has_many :teams, :through => :season_teams
end

class Team < ActiveRecord::Base
  has_many seasons, :through => :season_teams
end
于 2012-11-26T14:21:54.493 回答
0

您还可以查看 Rails 的Association Callbacks。它提供了可用于自定义行为的回调方法before_removeafter_remove

于 2013-05-09T13:42:53.020 回答