2

我正在使用acts-as-taggable-on gem v.2.4.1与rails v.3.2.13和ruby 1.9.3p392。 我刚刚将v.2.2.1的gem升级到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'数据库列中。 SQL queries performed, caching not working

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

谢谢, 亚历克斯

+0

有http://stackoverflow.com/questions/3946783/how-to-cache-tags-with-acts-的读as-taggable-on – David

+0

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

回答

1

到这个bug是固定的,这里有一个解决方法我已经实现:

<% 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()函数来获取它们中的每一个。

我在案例分享这这是谁都有用..

+0

是'cached_tag_list'父表中的一列吗?或者纯粹是一种方法? – ahnbizcad