2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Rails】キャッシュされた古いページが一瞬表示されるのを避ける方法

Posted at

#困っていたこと
取得したパラメータによって表示したいページを変更したくて
以下のようなコントローラ設定の時、

articles_controller.rb
class ArticlesController < ApplicationController
  def show
    if session[:for_article_show] == 1
      render '/articles/pattern_A'
    elsif session[:for_article_show] == 2
      render '/articles/pattern_B'
    end
  end
end

session[:for_article_show]が1の時に
pattern_A.html.erbが表示され、その後
session[:for_article_show]が2に変更されてshowアクションが実行されると、
pattern_B.html.erb
直接表示されると思っていました。

実際は、一瞬だけ
pattern_A.html.erb
が表示され
、その後すぐに
pattern_B.html.erb
の表示に切り替わりました。

これでは非常に見栄えが悪く、困っていました。

#原因
Rails標準gemである、turbolinksが原因でした。

turbolinksによって、
あるアクションによって描画されたページがキャッシュに存在した場合、
リクエストを送る前にまずキャッシュからプレビューを描画し、
レスポンスが返ると最新の状態を表示するようです。

【参考】turbolinks github "Application Visits" 項

#解決策
プレビュー機能が実行されたくないリンクを、以下タグで囲ってあげることで
ページのプレビューが表示されることがなくなりました!

<div data-turbolinks="false">
  <%= link_to article.title, article %>
</div>
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?