質問: モーダル表示している画面に戻りたいのですが、どういうロジックにすれば戻せるのかわかりません。 モーダル画面にある[確認]リンクをクリックすると、別画面に遷移します。 遷移先の画面にある[戻る]リンクをクリックすると、はじめに表示していたモーダル画面が表示されるようにしたいです。 今の実装だと、モダール画面が表示されている、裏のレイヤーの画面は表示されるのですが、 肝心のモーダル画面は表示されません。 [モーダル画面の裏にある画面を表示させる]→[モーダル画面を表示させる]という風にしたいです。 ご教示いただけませんでしょうか、よろしくお願いいたします。 ### 実装したコード 戻るボタン ``` <%= link_to "戻る", :back, class: "btn btn-primary" %> ``` ### 【↓モーダル 画面↓】 ![モーダル画面](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/520d5e081afeccbb748bc672970b9121.png) ### 【↓遷移先画面↓】 ![遷移先画面](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/dc4874c6e83380356fe99404b3ad5835.png)
回答: 強引にやるなら 戻る際のURLに何らかのパラメータを追加する ``` <%= link_to "戻る", ○○_path(modal: :on), class: "btn btn-primary" %> ``` モーダル画面でURLにそのパラメータが付いていたらモーダルを開くように javascript で制御する 注意:モーダルに入力フォームなどがあると内容は消えます 一応パラメータに入力フォームの中身も入れてしまえば、 javascript で復元できますが、古いブラウザ等でURL文字数制限にかかったり、入力の中身が個人情報でもURLに乗るため、あまり推奨できる方法ではありません ``` <%= link_to "戻る", ○○_path(modal: { name: 'aaa' }), class: "btn btn-primary" %> ``` その他方法 そもそも、モーダルから遷移して戻るという挙動が一般的ではないです 別の画面設計を検討するのも手だと思います 1. 「閉じる」だけ用意した別タブで開く(遷移先に戻る以外の遷移が無い場合) 2. 追加でモーダルを開く(遷移先がモーダルで示せる情報量の場合) 3. javascriptで既存画面を裏に隠しつつ見た目だけ画面遷移っぽくする(情報量が多い場合・難易度高め) など