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