Rails关联 - has_many vs has_and_belongs_to_many

3

我遇到了一个我以为很基础的关联问题。

我有一个游戏模型和一个比赛集模型。

在游戏模型中有一个游戏列表。游戏只在游戏表上列出一次,但它们可以属于许多比赛集。

matchset.rb -

has_many :games

针对game.rb文件,我不确定要放什么内容。我不想放belongs_to,因为游戏不仅属于一个比赛集,而是属于多个比赛集。我也不认为我想要放has_and_belongs_to_many,因为比赛集不一定“属于”游戏,但也许我看问题的角度有误。

例如:比赛集1中有游戏1、3和5。比赛集2中有游戏2和3。比赛集3中有游戏3、4和5。

我的背景是Oracle SQL,根据我的想法,比赛集表应该长这样。

id | game_id 
1  | 1
1  | 3
1  | 5
2  | 2
2  | 3
3  | 3
3  | 4
3  | 5

非常感谢您的帮助。

1个回答

2

以下这些关系应该适用于你:

class Game < ActiveRecord::Base
  has_many :game_match_set_relations
  has_many :match_sets, through: :game_match_set_relations

class MatchSet < ActiveRecord::Base
  has_many :game_match_set_relations
  has_many :games,  through: :game_match_set_relations

class GameMatchSetRelation < ActiveRecord::Base
  belongs_to :game
  belongs_to :match_set

  validates :game_id, presence: true
  validates :match_set_id, presence: true

我认为联接模型是不必要的。 - mechanicalfish
我认为是这样的,@mechanicalfish:OP说“游戏[...]但它们可以属于许多比赛组。” - MrYoshiji
1
建议在所有情况下使用联接模型,这样可以获得更灵活的关系,您可以在联接模型中添加额外的列,获得更好的 SQL 查询、更精确的验证等等(请参阅 Rails 风格指南获取所有优点)。 - MrYoshiji
好的推理,给你的答案点赞。感谢链接,我不知道有这样的东西存在。 - mechanicalfish
谢谢你的回答。所以我需要创建GameMatchsetRelations表来连接这两个表。创建这样的连接表是否需要特殊处理,还是像其他表一样即可? - mcnollster
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接