Недавно, еще не будучи супер-экспертом в создании приложений на 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, я позволил пользователю легко изменять эту настройку сайта, так как она теперь хранится в базе данных с помощью базовой CRUD-структуры Rails MVC.
Поскольку кэширование SQL в Rails не работает вне контекста действия, мне когда-нибудь нужно будет научиться переносить это в кэш и убедиться, что кэш очищается, когда контроллер Rails обрабатывает действие (например, при сохранении нового значения в контроллере настроек сайта и т. д.).
В любом случае, это клиентское приложение на Rails (только для внутреннего использования) не предназначено для высокопроизводительных задач, поэтому добавление запроса в ApplicationController работает нормально и избавляет меня от необходимости дублировать этот код в каждом контроллере проекта, где требуется эта настройка сайта.