首页 > 解决方案 > 基于会话 id 的片段缓存

问题描述

我正在寻找一种基于 ruby​​ on rails 中的会话 ID 在特定表单(新操作)上使用片段缓存的方法。这些表格应在会话销毁或这些表格中使用的记录发生任何更改时过期。

问题: 这些表单内容会根据用户类型而变化,例如针对某些用户类型显示某些字段。当我缓存表单时,它会为所有用户类型的登录显示相同的表单。

新的.html.erb

<% cache 'procedure_form_cache', skip_digest: true do %>
    <div class="container">
        <hr>
        <h3>Procedure</h3>
        <%= render 'form', procedure: @procedure %>
    </div>
<%end%>

程序.rb

class Procedure < ApplicationRecord
  def expire_cache             
         ActionController::Base.new.expire_fragment('procedure_form_cache')
  end
end

我希望基于表单中的会话 ID 的片段缓存

标签: ruby-on-rails

解决方案


<% cache [session.id, @procedure.updated_at] do %>
    <div class="container">
        <hr>
        <h3>Procedure</h3>
        <%= render 'form', procedure: @procedure %>
    </div>
<%end%>

应该可以解决问题,如果会话 id 更改或@procedure.


推荐阅读