2

レールv.3.2.13とルビー1.9.3p392でacts-as-taggable-on gem v.2.4.1を使用しています。gem を v.2.2.1 から v.2.4.1 にアップグレードしたところです。これらの手順に従って、データベースに「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

そして、これらのレコードが「cached_tag_list」データベース列にタグ文字列を保存しているにもかかわらず、SQL クエリが実行されていることを示す newrelic のスクリーンショットを次に示します。 SQL クエリが実行されましたが、キャッシュが機能していません

この宝石でキャッシュを有効にする方法はありますか?

ありがとう、アレックス

4

1 に答える 1

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() 関数を使用してそれぞれを取得しています。

これが他の誰かに役立つ場合に備えて、これを共有しています..

于 2013-07-08T18:31:12.940 に答える