2016-03-31 12 views
0

私はレール4のアプリケーションを持っていて、キャッシュを実装しようとしています。新しいユーザーが作成されたかどうかを確認するために@profiles_sidebar.firstキャッシュキーを使用します。私はこれがOKであるかどうかは分かりませんが、それでもdbクエリがあるからです。キャッシュを期限切れにする必要があるかどうかを確認するには、この方法が適していますか?私はうまくいくのですか?クエリをキャッシュした後のrails4がまだ実行されています

<% cache(@profiles_sidebar.first) do %> 
    <% @profiles_sidebar.each do |profile| %> 
    <%= link_to user_path(profile.user) do %>    
     <%= truncate(profile.full_name, length: 25) %> 
     <%= truncate(profile.company, length:25) %> 
    <% end %> 
    <% end %> 
<% end %> 

コンソールコードキャッシュ読み:あなたは、ダイジェストが作成されてから、レコードが更新されているかどうかを知る必要があるので、周りの少なくとも1つのデータベースクエリを取得する方法はありません

13:31:53 puma.1 | Profile Load (2.2ms) SELECT "profiles".* FROM "profiles" ORDER BY "profiles"."created_at" DESC LIMIT 1 
13:31:53 puma.1 | User Load (2.2ms) SELECT "users".* FROM "users" WHERE "users"."id" IN (67) 
13:31:53 puma.1 | Cache digest for app/views/users/_user_sidebar.html.erb: bfc9447057c94bcfe13c18e391127f2d 
13:31:53 puma.1 | Read fragment views/profiles/62-20160331112332689423000/bfc9447057c94bcfe13c18e391127f2d (0.2ms) 
13:31:53 puma.1 | Rendered users/_user_sidebar.html.erb (11.8ms) 

答えて

1

。あなたは、その一つのDBクエリので、「コールド」キャッシュにやや良いだろう@profiles_sidebarサイドバーの先行ロードでき

@profiles_sidebar = Profile.order(created_at: :desc) 
          .limit(10) 
          .load 

を単一のレコードを取得し、10の間の実際の差はしかし限界かもしれません。あなたはまた、1つのクエリでは、ユーザーとプロファイルの両方を取得するためにeager loading or includesを使用したい場合があり

@profiles_sidebar = Profile.includes(:user) 
          .order(created_at: :desc) 
          .limit(10) 
          .load 
+0

最大、おかげでこのラインを持っていることを確認します(デフォルトでは、DEVのENV無効になっています)。私はまだいくつかのものについてはわからないので、もう1つの質問を作成します。 –

+0

キャッシュキーに名前を付けることに関して新しいものがあります:http://stackoverflow.com/questions/36336322/rails4-caching-naming-conventions –

0

私はあなたが開発環境であると仮定し、あなたは必ずレールにキャッシュを有効にしているんされています?

はあなたがもう一度あなたのdevelopment.rb

config.action_controller.perform_caching = true 
+0

これは有効になっています。 –

関連する問題