单个外键引用多个表 [Rails 6]

Single Foregn Key references multiple Tables [Rails6]

我有一个包含“类别”、“玩家”和“比赛”的应用程序。

我想创建一个新的 Table:“建议”,参数为:

name:        string,
description: text,
type:        integer,
element_id:  integer

用户将能够为球员、类别或比赛创建“建议”。 type:integer 会指出这是什么类型的建议

"Category Suggestion" -> 1
"Player Suggestion"   -> 2
"Match Suggestion"    -> 3

我的问题是,如何仅使用一个外键(element_id) 引用多个表?此外键可以来自“类别”、“玩家”或“匹配”,具体取决于建议的“类型”。

我考虑了模型中的一个解决方案,我只是将外键放在那里,但我不确定这是否会导致我的应用程序出现问题。 我还考虑过创建 3 个表 CategorySuggestions、PlayersSuggestions 和 MatchesSuggestions,但这太过分了,我不太喜欢那样。

您要找的是Polymorphic Associations。您可以添加类似

class Suggestion
  ...
  belongs_to :suggestable, polymorphic: true
  ...
end

在数据库中,您将向 suggestions table 添加两列。

t.bigint  :suggestable_id
t.string  :suggestable_type

然后您可以简单地使用 suggestion.suggestable,它将为您提供正确类型的相应对象,而无需您自己管理任何类型或整数。