【发布时间】:2015-03-14 07:13:20
【问题描述】:
在 rails 应用程序中存储一组常量(如国家名称、货币、城市列表)的最佳方式是什么?
我想有一个名为 Constants 的模型来存储所有这些数据,另一个模型 ConstantMaps 是多态的,将常量映射到各种其他模型
这是正确的方法吗?
【问题讨论】:
标签: ruby-on-rails web-applications model
在 rails 应用程序中存储一组常量(如国家名称、货币、城市列表)的最佳方式是什么?
我想有一个名为 Constants 的模型来存储所有这些数据,另一个模型 ConstantMaps 是多态的,将常量映射到各种其他模型
这是正确的方法吗?
【问题讨论】:
标签: ruby-on-rails web-applications model
最好有更多具有语义名称的模型,每个模型都有反映模型应该了解自身的方法。您的模型应该对相关数据进行分组。例如,您可以有一个 Location 模型,其中包含返回国家名称的 Location#country 和返回城市名称的 Location#city 等方法。 Currency 将是它自己的模型,因为 Location#currency 考虑到您必须告诉 Location 它的位置这一事实是没有意义的。
拥有一个名为 Constants 的模型和另一个仅用于映射的模型是一个非常糟糕的主意,因为它不会告诉您模型中的内容,更糟糕的是它会包含不相关的数据。未来追踪错误和扩展功能将更加困难。
数据应存储在具有与模型名称对应的表的数据库中。模型的方法查询数据库并返回预期数据。如果出于某种原因您不能或不想将常量数据存储在数据库中,则每个相应的模型类都可以将哈希存储在 CONSTANT 变量中(例如 CITY_LIST = {australia: ["sydney", "melbourne", "brisbane",...], brazil: ["san paulo", "rio de janeiro",...]} 并且方法查询该变量而不是数据库.
【讨论】:
如果此列表需要频繁添加/更改,请考虑将它们存储在您的数据库中。否则,它是您代码的一部分,每次更改都需要新的部署。
【讨论】: