Discourse 插件和 Rails 6 config/initializers 问题

我最近做了一件事:虽然我还远不像在座许多 Rails 应用专家那样精通,但我规划了哪些配置变量需要在不重启 Rails 的情况下重新加载,并将相关代码移到了 ApplicationController 中。

我相信肯定有更好的做法,但由于这个特定的 Rails 实现是一个后台办公应用,性能并非问题:

class ApplicationController < ActionController::Base

  before_action  :set_site_settings

  private

  def set_site_settings
    @use_custom_date_format = Sitesetting.where(name: "custom_date_format").pluck(:value).last
  end

end

当我找到更好的实现方式时,我会非常高兴!

不过,将这部分逻辑从 Rails 初始化器中移出意味着用户可以轻松更改此站点设置,因为它现在存储在数据库中,并可通过基本的 Rails MVC CRUD 脚手架进行操作。

由于 Rails 中的 SQL 缓存无法在动作作用域之外生效,总有一天我需要学习如何将此逻辑移至缓存中,并确保在 Rails 控制器处理动作时(例如在站点设置控制器中保存新值等)缓存能够正确清除。

总之,这个面向客户的 Rails 应用(仅限后台办公)并不需要高性能支持,因此在 ApplicationController 中添加该查询完全可以接受,也避免了在项目中每个需要使用该站点设置的控制器里重复编写这段代码。