在Rails应用程序中存储全局应用程序设置的最佳方法是什么?

Dan*_*ski 7 configuration ruby-on-rails

我想处理两种全局配置设置:

  • 可以由用户更改的设置,例如是否发送特定事件的通知邮件.
  • 与特定产品版本相关联的设置,例如禁用免费版本中的功能,该功能仅在商业版本中可用.

存储这些设置的最佳方法是什么?数据库,配置文件,在源代码中硬编码,......?

EmF*_*mFi 6

对于这两种情况的数据 你将为多个人/产品使用相同的结构,所以它是有道理的.它还允许您在不重新启动服务器的情况下进行更改.

我过去以这种方式处理过:对于特定于用户的设置,我创建了一个UserSettings模型/表,它与用户具有一对一的关系.这样做的原因是我的大多数涉及用户的操作并不需要加载这些设置,所以它们只在我需要时才包含在数据库的用户加载中.

当我这样做时,我通常会对列名进行分组,以便我可以编写基于名称动态创建的帮助程序.这意味着我不必修改我的视图以包含新设置,除非我添加一个具有不同命名方案的设置.

对于特定于产品的设置,这取决于您的工作方式.并且有几种方法可以解释您的问题.

我读它的方式是你想要决定产品水平.用户可以覆盖或禁用用户设置的设置.并可能定义一些产品特定的设置.

我会用一对多的产品来设定关系.设置表将是简单的(product_id,setting_name,setting_default_value,allow_user_change)

这做了很多事情.它允许您拥有不同产品的可变设置列表(适用于您提供许多不同产品而非不同层次的服务访问权限的情况).它还允许您定义用户可以/不可以更改的设置,并为该产品类型提供值.可以在不重新启动应用程序的情况下从管理员视图更改.它也与用户设置无关,如果用户没有在product_settings中列出设置,那么就没有问题.

缺点是您将在此表中有多个常用设置.我会将每个产品具有不同值的设置移动到产品表中的字段.

您还必须编写验证以确保用户不会更改其产品无法更改的设置.您还必须编写帮助方法来合并产品和用户方的设置.