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