トップ «前の日記(2012/02/12 (日) ) 最新 次の日記(2012/02/14 (火) )» 編集 RSS feed

HsbtDiary


2012/02/13 (月) [長年日記]

[Rails][ruby] Rails で同一 URL で html と json を返す時にはまるアレ

Rails (別に Rails に限った話ではないけど) で

http://railsapp/students

のような URL で以下の条件がそろった時に同じURLにブラウザの戻るボタンで戻ると生JSONが表示されてしまう問題に悩んでいた。

  • 同一URL で HTML と JSON の両方を返す
    • json が欲しい時は data-type に json を指定している。Rails の controller では respond_to で処理を分けている
  • HTML を render した後に ajax で json を取得している

これは同一URLの時にブラウザのキャッシュが効いているのが問題らしい。対処方としてはキャッシュをオフにしたり ajax のリクエストをするときにダミーパラメータを付けたりといった方法があるみたいだけど、Rails の場合 jQuery.ajax は jquery_ujs で色々拡張したりしているので、キャッシュをオフにする方法ではなく、ajax のリクエストを出す時にダミーパラメータを付ける方法で対処した。

こういう、外部に公開するわけでもないのに、わざわざ /api/students みたいなのを作るのもアレな時に同一URLにしたりするのはよくあると思うんだけど、ダミーパラメータを付ける以外にスマートな方法って無いのかなあ。

[Life] 家の給湯器が新しくなった

先週末に給湯器の風呂の湯張りが動かなくなって、管理会社経由で修理会社を手配してもらったら、今の機種はもうパーツも含めて取り寄せることができないらしく、新品に交換となった。

基本機能は前の機種と同じだけど、液晶がLEDになったり、時間指定で湯張りができるようになってちょっと得した気分。

本日のツッコミ(全2件) [ツッコミを入れる]
# ただただし (2012/02/13 (月) 22:57)

RESTful的にはstudents.htmlとstudents.jsonじゃないの?

# しばた (2012/02/14 (火) 12:33)

というツッコミを他でももらって調べてみたんですが、Rails の ActionView::Helpers::FormHelper のオプションで students.json となるようにしても、URL が .json にならないんですよねえ。<br><br>バグなのか、そもそもそういう物なのか、使い方が間違っているのかのどれかなのでもう少し深追いしてみます。