Rails 5, активные записи нужны на каждой странице - PullRequest
0 голосов
/ 10 июня 2018

Я начал ror около месяца назад, и я очень близок к завершению моего первого проекта. У меня есть несколько моделей, которые должны быть на каждой странице, так как я использую их данные на панели навигации, выпадающих меню и нижнем колонтитуле (например, продукты и т. Д.),Дело в том, что я заметил, что мое приложение загружает слишком много активных записей, и я хочу знать, есть ли еще какая-то оптимизация.

Я использую before_action на ApplicationController для загрузки этих активных записей;

before_action :set_constants, except: %i[destroy]

 def set_constants
  @main_contents = MainContent.all
  @abouts = About.all
  @products = Product.all
  @services = Service.all
  @policies = Policy.all
  @comm = Communication.first
 end

Я просто хочу знать, это хорошо?или есть другой способ сделать это, так как мне нужны эти модели почти на каждой странице.

Ответы [ 2 ]

0 голосов
/ 10 июня 2018

Похоже, я получил решение.Для этого я использовал низкоуровневое кэширование.Здесь мы идем;

def set_constants
  @main_contents = fetch_main_cache(MainContentsController, MainContent)
  @abouts = fetch_main_cache(AboutsController, About)
  @products = fetch_main_cache(ProductsController, Product)
  @services = fetch_main_cache(ServicesController, Service)
  @policies = fetch_main_cache(PoliciesController, Policy)
  @comm = fetch_main_cache_with_query(CommunicationsController, Communication, 'first').first
end

def fetch_main_cache(controller, model)
  fetch_main_cache_with_query controller, model, 'all'
end

def fetch_main_cache_with_query(controller, model, query)
  Rails.cache.fetch(controller.controller_name + '_main_cache') do
    model.send query
  end
end

def clear_main_cache
  Rails.cache.delete controller_name + '_main_cache'
end

Затем я очистил кеш при создании или обновлении новой модели (я делал это на каждом контроллере)

def update
  respond_to do |format|
    if @communication.update(communication_params)
      clear_main_cache
0 голосов
/ 10 июня 2018

Если вам нужны эти данные везде, то их можно загрузить в ApplicationController.

Вы можете улучшить производительность, используя низкоуровневый кэш для запросов, используя Rails.cache.fetch .

Вы можете включить временное кэширование в разработке, используя команду rails dev:cache.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...