【问题标题】:Acts-as-taggable-on caching does not seem to work充当可标记缓存似乎不起作用
【发布时间】:2013-07-02 10:44:33
【问题描述】:

我正在使用 acts-as-taggable-on gem v.2.4.1 和 rails v.3.2.13 和 ruby​​ 1.9.3p392。 我刚刚将 gem 从 v.2.2.1 升级到 v.2.4.1 并按照these instructions 我在我的数据库中添加了一个“cached_tag_list”列。保存/更新记录时,该列似乎按预期更新,但是当我尝试获取标记记录时,我仍然可以看到正在执行 SQL 标记查询(而不是获取缓存的标记)。 这是我认为的代码:

<% if !tape.tag_list.empty? %>
    <% for tag in tape.tags %>
        <span><%= tag.name %></span>
     <% end %>
<% end %>

我的模型有以下一行:

acts_as_taggable_on :tags

这是来自 newrelic 的屏幕截图,显示了正在执行的 SQL 查询,即使这些记录已在“cached_tag_list”数据库列中保存了标记字符串。

任何想法如何使用此 gem 启用缓存?

谢谢, 亚历克斯

【问题讨论】:

  • @David 我认为链接的答案与我的情况无关:1)我上面发布的迁移代码与您提供的链接中的答案相同并且运行良好,所以这不是问题(实际上我使用了这个问题的代码)。 2)我没有使用自有标签,所以这也不是问题。无论如何,谢谢你的回复。

标签: ruby-on-rails ruby-on-rails-3 caching acts-as-taggable-on acts-as-taggable


【解决方案1】:

在修复此错误之前,这是我实施的解决方法:

    <% if tape.cached_tag_list != "" %>
        <% for tag in tape.cached_tag_list.split(', ') %>
            <span><%= tag %></span>
        <% end %>
    <% end %>

由于每次保存记录时都会正确更新 cached_tag_list 列,因此我使用它来获取每条记录的标签,而无需调用额外的 SQL 查询,只需一个。由于 cached_tag_list 列存储了一个带有逗号分隔标签的字符串,因此我使用 split() 函数来获取它们中的每一个。

我分享这个以防它对其他人有用..

【讨论】:

  • cached_tag_list 是父表中的列吗?还是纯粹是一种方法?
猜你喜欢
  • 1970-01-01
  • 2011-10-19
  • 2011-09-03
  • 2011-03-09
  • 1970-01-01
  • 2012-08-14
  • 1970-01-01
  • 2016-04-25
  • 1970-01-01
相关资源
最近更新 更多