我不熟悉缓存,我不确定我最好的做法是什么。
我想缓存依赖于复杂查询的视图的一部分。查询类似于:
@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
被迭代,其子代被迭代。鉴于此,并且考虑到实例变量中查询结果的性质,我不确定在何处实现缓存。在模型中?在视图中?
所以我的问题是:
答案 0 :(得分:0)
解决方案是简单地添加两个字符:
@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)
这称为memoization,您可以查找它。这是一个来源:http://www.justinweiss.com/articles/4-simple-memoization-patterns-in-ruby-and-one-gem/