使用包含一组参数
的链接生成视图<%= 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 guide或other documentation之间,控制器和辅助逻辑需要绑定到缓存的片段并不明显。