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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

解決済

1回答

662閲覧

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

hokosugi

総合スコア63

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

1クリップ

投稿2019/02/12 23:24

大量にあるデータをセレクターフォームを使って絞り込み、抽出されたデータをテーブルで表示するページを作成しました。
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をテーブルにします。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

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

  • ajaxによる検索実行時にjsでlocation.hashに検索条件を保存

-[URL]#キー=値&キー=値&キー=値&…という感じ
-こうすることで、このページに戻ってきてもURLに検索条件が残っている
-検索自体は検索フォームの値を取ってきて、それをもとに行う

  • 画面読み込み時(jsロード時)にlocation.hashの値を見て、検索フォームに値を入れつつajaxで検索実行

-画面読み込み時=初回or戻ってきたとき
-初回はlocation.hashが空なので全件検索になる

投稿2019/02/13 00:10

Kta-M

総合スコア456

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hokosugi

2019/02/13 06:38

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

2019/02/13 07:18

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

2019/02/20 06:52

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問