Rails 5,每页都需要活动记录

时间:2018-06-10 14:07:55

标签: ruby-on-rails ruby ruby-on-rails-5

我大约一个月前开始工作,我非常接近完成我的第一个项目。我有一些模型需要在每个页面上,因为我在导航栏,下拉菜单和页脚(如产品等)上使用他们的数据。 事情是我注意到我的应用程序加载了太多活动记录,我想知道是否有任何优化。

我在ApplicationController上使用before_action来加载这些活动记录;

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 :(得分:0)

如果您需要在任何地方使用这些数据,可以在ApplicationController中加载它们。

您可以使用Rails.cache.fetch在查询中使用低级缓存来提高性能。

您可以使用rails dev:cache命令在开发中启用临时缓存。

答案 1 :(得分:0)

好像我得到了解决方案。 我使用低级缓存来实现这一目标。 我们走了;

global move_right

然后我在创建或更新新模型时清除了缓存。(我在每个控制器上都这样做了)

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