单个外键引用多个表 [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
,它将为您提供正确类型的相应对象,而无需您自己管理任何类型或整数。
我有一个包含“类别”、“玩家”和“比赛”的应用程序。
我想创建一个新的 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
,它将为您提供正确类型的相应对象,而无需您自己管理任何类型或整数。