ruby-on-rails - 具有公共(public)列的多种类型对象的 ActiveRecord 模式?

标签 ruby-on-rails ruby postgresql activerecord

我正在为激战 2 开发 Rails 5 应用程序,我正在尝试找出一种方法来序列化和存储游戏中的所有项目,而无需复制代码或表列。该游戏有一个公共(public) API 可以从中获取项目,记录在案 这里:https://wiki.guildwars2.com/wiki/API:2/items

如您所见,所有项目都共享多个数据,例如 ID、值(value)、稀有度等,但随后还会根据其类型分割为特定的详细信息。

我一直在四处寻找解决方案,并且找到了一些答案,但没有一个适用于这种特定情况。

  • 单表继承:项目之间差异太大。 STI 最终可能会得到一个超过 100 列宽的表格,其中大部分为空。
  • 多态关联:看起来真的不是使用它们的正确方法。我不是要创建一种包含多个其他位置的模型,我只是想扩展我的“项目”模型的数据。
  • 多表继承:在我看来,这是完美的解决方案。它会做我想要的。不幸的是,ActiveRecord 不支持这一点,而且我发现的所有“解决方法”看起来都很古怪。

基本上,我想要的是一个带有公共(public)列的单个“项目”模型,然后是一个“详细信息”属性,该属性将从相关表中获取特定于类型的数据。

创建此架构的最佳方式是什么?

最佳答案

一种可能的解决方案: 在详细信息(文本)列上使用#serialize

class Item
 serialize :details, Hash
end

一个巨大的缺点是,如果您需要查询详细信息数据,这是非常低效的。这基本上绕过了数据库的 native 抽象。

关于ruby-on-rails - 具有公共(public)列的多种类型对象的 ActiveRecord 模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44480980/

相关文章:

ruby-on-rails - Rails 4 枚举 - 如何测试相等性?

ruby-on-rails - 在 rails docker 容器中找不到 rake-11.1.2

ruby-on-rails - 如果表的名称中包含 _,如何从 Rails 控制台访问表

ruby - 在 Ruby `or` block 中使用 `||` 与 `reject` 时的优先级

ruby-on-rails - Rails:FATAL - 用户对等身份验证失败(PG::Error)

ruby - 在 Ruby 中的一行中循环遍历数组的代码

ruby-on-rails - Twilio 短信表单适用于本地但未推送到 heroku - Ruby

postgresql - heroku rake 数据库 :migrate failing - how to diagnose/fix?

spring - 使用 Spring MVC 确认密码的最简单方法

sql - Postgresql - INSERT INTO 基于多个 SELECT