質問: お世話になります。 Railsで売上の予測ができるようなページを作成しております。 過去の売上が一覧に表示されており、一覧にある品番をクリックすると、現在庫が表示されるようになっております。※画像参照 画像1 ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/ec331483ac5068cafea0929009a52774.png) 画像2 ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/97a8e284033be4566cbdcd156d888d3a.png) 上記画像では、画像1にあるテーブルの品番にある「E220」をクリックすると画像2のように在庫総数テーブルが表示されるようになっております。 ここで質問です。 index.html.slimに表示されている一覧から、品番をクリックして在庫テーブルを表示したときに(index.html.slimに再帰したとき)に、 遷移前のスクロール位置が表示されるようにしたいです。現状、ページトップが表示されてしまいます。 似たような質問があったのですが、その質問は解決しておらず、回答にあった方法も試しましたができませんでした。 宜しくお願い致します。 --- 試したこと controllerでrenderして元のindex.html.slimのページを表示する際に、下記のように書いてみました。 render index_path + '#id名' テーブルの品番の一つ一つにidがふってあるので、#を付ければ遷移後にそのidにもどるかと思いましたが、下記エラーとなりました。 ``` Missing template http://localhost:3000/index#E22010 with {:locale=>[:ja], :formats=>[:html], :variants=>[], :handlers=>[:raw, :erb, :html, :builder, :ruby, :slim, :coffee, :jbuilder]}. Searched in: * "D:/ルート/app/views" ``` --- 環境 windows10 x64 Rails 5.2.2 ruby 2.5.3p105 (2018-10-18 revision 65156) [x64-mingw32] 宜しくお願いいします。
回答: javascriptで遷移前のテーブルのスクロール位置を取得し、javascript内のグローバル変数に入れておく。 遷移後にロードが終わったタイミング(turbolinksのload)でグローバル変数に格納しておいたスクロール位置をテーブルに反映させることでスクロール位置を復元するとこができました。 ``` var scrollpoint = 0 //スクロール位置を格納するグローバル変数 document.addEventListener('turbolinks:before-visit', function() { //遷移する前に動くイベント get_scroll_point(); //呼び出す関数(下記) }); document.addEventListener('turbolinks:load', function() { //遷移後に動くイベント restore_scroll(); }); // スクロール位置を復元 function get_scroll_point() { var tableScrollXPoint = document.getElementById("maintable").scrollTop; //テーブルに振ってあったid(maintable)のスクロール位置を取得 scrollpoint = tableScrollXPoint //スクロール位置をグローバル変数に格納(これは↑と1行にまとめても良さげですね) } function restore_scroll() { document.getElementById("maintable").scrollTop = scrollpoint; //遷移前のスクロール位置をテーブルに設定し、復元する } ``` 慣れないjavascriptに奮闘しました。 誰かの役に立てばと思います。 ほかに良い方法がありましたら引き続きご教授願います。