如果我们有一个包含相对静态数据的小表,是否可以让 Active Record 在应用程序启动时加载它,而不必为这些数据访问数据库?
请注意,理想情况下,我希望这些数据可以与与其有关系的其他模型连接。
一个示例可能是带有电话号码前缀的国家/地区列表 - 此列表不太可能更改,如果更改,管理员将更改它。其他表可能与此有关系(例如,给定一个引用国家/地区的用户,我们可能想要查找国家/地区电话前缀)。
我在这里看到了一个类似的问题,但它已有 6 年历史,指的是 Rails 2,而我正在使用 Rails 5,也许从那时起就引入了一些东西。
首选的解决方案是:
- 内置 Rails / ActiveRecord 功能可在启动时加载表一次,如果随后加载与缓存表有关系的其他记录,则自动链接到缓存对象(即在某处手动缓存 MyModel.all 是不够的,因为仍然会通过查询数据库来加载关系)。
- 维护的库执行上述操作。
- 如果两者都不可用,我想另一种方法是将静态数据集定义为内存中的枚举/哈希或类似的,并将哈希键保留在与该数据有关系的记录上,并在这些模型上定义方法以使用数据库中持久化的键使用散列中的对象进行查找。虽然这似乎很手动......
[编辑] 潜在解决方案要考虑的另一件事 - 手动解决方案 (3) 还需要自定义控制器和路由,以便可以通过 API 访问此类数据。理想情况下,最好有一个解决方案,如果需要,可以通过 RESTful API(只读 - 只是 GET)提供此类数据,使用标准 Rails 机制(如 Scaffolding),而无需太多人工干预。