Edited at

Rails, CoffeeScript, 任意のページで自動的にページ移動する


目的

・任意のページで、数秒後に自動的に任意のURLへジャンプする

よくある

"数秒後に自動的に移動します。自動的に移動しない場合はこちらへ"

みたいなやつです。


とりあえずコード書かにゃ

そのまま書いたら以下の様になると思うんですよ。


js.coffee

  redirectToSomewhere = ->

setTimeout ->
window.location.href = <リダイレクト先のURL>
, 5000 # 5秒後に移動


RailsはJSというJSなんでもかんでも実行する

Railsはassets/javascripts/の中にある.jsファイルを全部実行するから

「このページだけで実行」とかできないんですよね、いぁconfigの中でなんやかんややればできるっぽいことは噂に聞きますが。めんどい

任意のページに<script>埋め込むというやりかたもあるけどできればやりたくない。

※全然関係無いですけどQiitaって<script>て書いたらそのままタグとして認識されるんですね


特定のIDを持っているリンクがあるときだけ実行する

結果として以下みたいな感じでやりました。


html.slim

= link_to '自動的に移動しない場合はこちらをクリック', <リダイレクト先のURL>, id: <特定のID>


みたいに書いてjsで


js.coffee

  redirectToSomewhere = ->

url = $("#<特定のID>").attr("href")
if url
setTimeout ->
window.location.href = <リダイレクト先のURL>
, 5000 # 5秒後に移動

て書いた、ページ内に特定のIDをもったaタグがあれば自動的に移動します的な感じです。

欠点として、間違って同じIDをどっか違うところにも使ってしまう感じにすると容赦なく飛ばされる感じの素敵な感じになっています。

もっといい方法だれか教えてください。