根据特定条件生成片段缓存生成

时间:2017-10-10 09:49:59

标签: ruby-on-rails caching

使用包含一组参数

的链接生成视图
<%= link_to "blob", chosen_bilancinos_path(x: 0, y: session[:focusdate], z: session[:structure_id]) %>

和需要缓存的组件

<% cache "x-#{params[:x]}_y-#{params[:y]}_z-#{params[:z]}" do %>
  <%= number_with_precision(cdg_other_costs, :precision => 1, :delimiter => "\u00a0") %>
  [...]
<% end %>

注意:development.rb指定了config.action_controller.perform_caching = true。 但是,如果我在搜索后更改y参数的值后测试输出,则缓存机制尚未意识到数据已更改并且需要生成新的缓存。

控制器操作定义需要缓存的根数据对象

@last_correction = Correction.where(['analisi_id = ? AND profit_center_id = ?', session[:analisidate], session[:profit_center_id]]).order('updated_at DESC').first.updated_at.to_formatted_s(:number)
if @last_correction.nil?
  @last_update = Bilancino.order('updated_at DESC').where(['analisi_id = ?', session[:analisidate]]).first.updated_at.to_formatted_s(:number)
else
  @last_update = @last_correction
end

Helper方法建立在控制器生成的数据之上,在访问视图之前还需要额外的缓存数据

def cdg_base(cdg_id)
  b = Bilancino.where(['cdg_id = ? AND id IN (?) AND pc_id = ?', cdg_id.to_i, @bilancinos, params[:z]]).map(&:balance).sum
  r = Correction.where(['cdg_id = ? AND analisi_id = ? AND pc_id = ?', cdg_id.to_i, params[:y], params[:z]]).map(&:value).sum
  b + r
end

def cdg_other_costs
  cdg_base(9)
end

尽管可以使用新的缓存生成的跳闸连接数据,但在rails caching guideother documentation之间,控制器和辅助逻辑需要绑定到缓存的片段并不明显。

0 个答案:

没有答案