gpt4 book ai didi

ruby-on-rails - 为什么这个缓存语句没有写出我期望的键?

转载 作者:行者123 更新时间:2023-12-04 19:34:49 26 4
gpt4 key购买 nike

我的 _profile.html.erb 中有这个部分的:

<% cache [current_user.roles.first, profile, @selected_profile, params[:rating]] do %>

然而,这是我在服务器日志中看到的:
Read fragment views/profiles/26-20161212033839290582/profiles/52-20161213010040474070/profiles/14-20161213015458288839/profiles/34-20161212035644491093/profiles/33-20161212035644237925/profiles/38-20161207092843851446/profiles/35-20161212040016291016/profiles/36-20161212040016565707/profiles/4-20161213021028862933/profiles/39-20161207092843925084/profiles/46-20161207092844067579/profiles/47-20161207223703646028/profiles/37-20161212040016656625/660bdc6ad0b20e4c5329112cf79946f7 (0.1ms)

我什么也没看到 roles那里。

发生的情况是,如果我以用户身份登录 admin角色,然后以具有另一个角色的用户身份登录,我看到缓存 profiles显示的好像我是管理员,而不是具有正确 View 的其他用户。

什么可能导致这种情况,我该如何解决?

编辑 1

如果我更改 cache声明是这样的:
<% cache [current_user, profile, @selected_profile, params[:rating]] do %>

刷新一下,这就是日志的样子:
Write fragment views/users/2-20161218005548388099/profiles/37-20161212040016656625///bb163edd4a8c7af2db71a04243338e7b (0.1ms)
Rendered collection of profiles/_profile.html.erb [1 times] (25.4ms)
Write fragment views/profiles/26-20161212033839290582/profiles/52-20161213010040474070/profiles/14-20161213015458288839/profiles/34-20161212035644491093/profiles/33-20161212035644237925/profiles/38-20161207092843851446/profiles/35-20161212040016291016/profiles/36-20161212040016565707/profiles/4-20161213021028862933/profiles/39-20161207092843925084/profiles/46-20161207092844067579/profiles/47-20161207223703646028/profiles/37-20161212040016656625/83ddeaa031bf68e602ce66af2d268317 (0.1ms)

编辑 2

当我 binding.pry_profile.html.erb ,我得到以下信息:
[3] pry(#<#<Class:0x007f968480ec98>>)> current_user.roles.first
=> #<Role:0x007f969e4422a8 id: 1, name: "admin", resource_id: nil, resource_type: nil, created_at: Mon, 12 Sep 2016 00:38:47 UTC +00:00, updated_at: Mon, 12 Sep 2016 00:38:47 UTC +00:00>

我什至尝试了以下方法:
<% cache [current_user.roles.first.name, profile, @selected_profile, params[:rating]] do %>

当以非管理员用户身份登录时,它仍然为我提供与管理员用户相同的缓存结果。

编辑 3

这是 cache调用调用集合的块 _profile.html.erb :
  <% cache @profiles do %>
<div class="wrapper wrapper-content">
<% @profiles.to_a.in_groups_of(3, false).each do |profiles| %>
<div class="row">
<%= render partial: "profile", collection: profiles %>
</div>
<% end %>
</div>
<% end %>

最佳答案

您的父缓存正在阻止子缓存正确完成它们的工作。您可以删除父缓存,也可以将其移动到顶部,然后每个子缓存都可以分开

替换 <% cache @profiles do %>和:

<% cache [current_user.roles.first.try(:name), @profiles, @selected_profile, params[:rating]] do %>

然后是内部 _profile.html.erb
<% cache [current_user.roles.first.try(:name), profile, @selected_profile, params[:rating]] do %>

关于ruby-on-rails - 为什么这个缓存语句没有写出我期望的键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41204590/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com