【问题标题】:Correct way of rails caching complex queryrails缓存复杂查询的正确方法
【发布时间】:2015-11-09 13:00:14
【问题描述】:

我是缓存新手,我不确定我最好的做法是什么。

我想缓存依赖于复杂查询的视图的一部分。查询类似于:

@sessions_next_week = group_by_wday(LittleClassSession.location_only([1,2]).age_range_only(age_from, age_to).supports_dropins_only(support).approved_users_only.next_week)

您会在上面看到许多作用域和方法被调用。视图呈现一个名为 @sessions_next_week 的实例变量,如下所示:

<% @sessions_next_week.each do |wday, lcs| %>
  <h3><%= wday %></h3>
  <%= render partial: 'table_head' %>
  <% lcs.each do |s| %>
    <%= render partial: 'table_row', :locals => {:s => s, :show_day => true} %>
  <% end %>
  <%= render partial: 'table_foot' %>
<% end %>

如您所见,@sessions_next_week 被迭代,其子元素也被迭代。鉴于此,以及实例变量中查询结果的性质,我不确定在哪里实现缓存。在模型中?在视图中?

所以我的问题是:

  1. 我需要模型缓存还是可以在视图中执行此操作?
  2. 正确的实现方式是什么?

【问题讨论】:

    标签: ruby-on-rails caching


    【解决方案1】:

    解决方法是简单地添加两个字符:

    @sessions_next_week ||= group_by_wday(LittleClassSession.location_only([1,2]).age_range_only(age_from, age_to).supports_dropins_only(support).approved_users_only.next_week)
    

    这叫做记忆,你可以查一下。这是一个来源:http://www.justinweiss.com/articles/4-simple-memoization-patterns-in-ruby-and-one-gem/

    【讨论】:

    • 这是一个很好的提示,但我正在使用 @sessions_next_week 之类的东西多次访问数据库,我肯定需要缓存
    猜你喜欢
    • 1970-01-01
    • 2013-05-22
    • 1970-01-01
    • 2017-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-19
    • 2023-04-09
    相关资源
    最近更新 更多