質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.59%

rails: ページ遷移後に動的に変更された元ページに戻りたい

解決済

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 1,661

score 63

大量にあるデータをセレクターフォームを使って絞り込み、抽出されたデータをテーブルで表示するページを作成しました。
ajax,js.erbで動的に変更する仕様となってます。
このテーブルから他のページに遷移したあとに元ページにリダイレクトすると当然最初から読み込まれてしまい先ほどの抽出されたデータをセレクトフォームから選び直さないといけなくなります。
頻繁に元ページに戻るため一度抽出したデータを固定して選びなおす手間を省きたいのですが、何か方法はあるのでしょうか?

よろしくお願いします。

参考

<%# view.html.erb %>
<%= select_tag 'bigIndex', options_for_select(@arrayBigIndex), id: 'bigIndex', class: 'btn btn-default' %>
<%= select_tag 'middleIndex', options_for_select(@arrayMiddleIndex), id:"middleIndex", class: 'btn btn-default' %>

<div id="change"></div>
<%# _table.html.erb %>

<table class="table">
      <tr class="thread">
        <th>smallIndices1</th>
        <th>smallIndices2</th>
      </tr>
      <tbody>

      <% @wholeIndices_csv.each do |index| %>
        <% if index.bigIndex == @bigIndex && index.middleIndex == @middleIndex %>
          <tr>
            <td data-label="smallIndices1"><%= index.smallIndices1 %></td>
            <td data-label="smallIndices2">

--<%# 以下省略 %>--
// js.erb
$("#bigIndex").html("<%= escape_javascript(select_tag 'middleIndex', options_for_select(@arrayMiddleIndex) %>");
$("#change").html("<%= escape_javascript(render :partial => 'table'); %>");
# controller
@wholeIndices_csv = Index.includes(user: :pictures).where("user_id=?", @user.to_i)
@bigIndex = params[:bigIndex] # ajaxで取得
@middleIndex = params[:middleIndex] # ajaxで取得
# bigIndexセレクトフォーム用の配列を準備
    @arrayBigIndex = Array.new
    @wholeIndices_csv.each do |csv|
      @arrayBigIndex.push(csv.bigIndex)
    end
    if @arrayBigIndex.nil? == false
      @arrayBigIndex = @arrayBigIndex.uniq # 配列に重複を避ける

    # middleIndexセレクトフォーム用の配列を準備
    if @bigIndex.nil? && @middleIndex.nil?
      @arrayMiddleIndex = Array.new
    elsif @bigindex.nil? == false && @middleIndex.nil?
      @arrayMiddleIndex = Array.new
      @wholeIndices_csv.each do |csv|
        if csv.bigIndex == @bigIndex
          @arrayMiddleIndex.push(csv.middleIndex)
        end
      end
      @arrayMiddleIndex = @arrayMiddleIndex.uniq
    elsif @bigIndex.nil? == false && @middleIndex.nil? == false
      @arrayMiddleIndex = Array.new
      @wholeIndices_csv.each do |csv|
        if csv.bigIndex == @bigIndex
          @arrayMiddleIndex.push(csv.middleIndex)
        end
      end
      @arraymiddleIndex = @arrayMiddleIndex.uniq
    end


読みにくい下手なコードです。要はセレクターでデータベースのカラム、bigIndexとmiddleIndexを選んで複数のsmallIndicesをテーブルにします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

ajaxによる検索実行時にjsでlocation.hashに検索条件を保存しておくやり方をしたことがあります。
方針だけお伝えすると、以下のような感じです。

  • ajaxによる検索実行時にjsでlocation.hashに検索条件を保存
    -[URL]#キー=値&キー=値&キー=値&…という感じ
    -こうすることで、このページに戻ってきてもURLに検索条件が残っている
    -検索自体は検索フォームの値を取ってきて、それをもとに行う
  • 画面読み込み時(jsロード時)にlocation.hashの値を見て、検索フォームに値を入れつつajaxで検索実行
    -画面読み込み時=初回or戻ってきたとき
    -初回はlocation.hashが空なので全件検索になる

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/02/13 15:38

    ご回答ありがとうございます。
    簡単そうでやりたいことを満たせそうな方法だと思います。早速帰ったら試してみます。
    楽しみです。
    改めてありがとうございます。

    キャンセル

  • 2019/02/13 16:18

    お役に立てそうで良かったです!

    キャンセル

  • 2019/02/20 15:52

    railsはアンカーをサーバーに読み込まないようで loction.hash でURLの指定が出来ないようです。
    時間かかりましたが、Kta-Mさんの意見を参考にしつつ、
    セレクター側に url_for のオプションで :anchor を付けて
    セレクター側に飛ばす側に link_to にもオプション :anchor で指定することで
    無事、セレクター選択を維持しつつ戻ってこれるようになりました。
    中途半端なログになってしまい申し訳ありませんでしたが、お陰で完全に解決出来ました。
    ありがとうございました。

    キャンセル

  • 2019/03/01 18:46

    https://qiita.com/hokosugi/items/57cd3d693a6188ad777e

    完全に解決したといいながら躓いていました。上記で本当に解決しました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.59%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る