気ままに気ままのエンジニアブログ

定期的に得た知見を気ままに発信中

【Rails】任意のパラメータが入ったURLに画面遷移させるやり方

こんにちは。

夏がやっと来ました!さいクゥ〜

どうもハチマキです。

はじめに

画面遷移を実現するため、普段下記のように使っているlink_to。
これは至ってシンプルな画面遷移です。

・例1
= link_to 'yahooサイトへGO', 'http://www.yahoo.co.jp/', title: "yahooサイト", class: 'desc-center'

・例2
= link_to 'login_path', title: "ログイン", class: 'desc-center', target: '_blank' do
  ログイン
  %br
  画面
    
・例3
= link_to 'http://www.yahoo.co.jp/', title: "yahooサイト", class: 'desc-center' do
  = image_tag 'imgae/yahoo-logo'

今回ある検索結果を遷移先に定義したいと思ったのですが、やり方に迷いました。
そのため、色々調べた結果、新たな学びがあったので今回まとめていこうと思います。

環境

任意のパラメータが入ったURLに画面遷移させるやり方

早速ですが、まず初めにこちらから。こんな感じのURLに遷移させます。

https://〇〇/users?group_id=1?team_id=2

画面遷移の方法は、link_toのpathの引数にパラメータを定義することで実現できます。

*こんな感じ
= link_to users_path(group_id: 1, team_id: 2)

*こんな感じ
= link_to users_path(group_id: 1, team_id: 2), target: '_blank' do
   = image_tag 'imgae/yahoo-logo'

上記は至ってシンプルですが、「%5B%5D=〇〇」、「%3A」などが加わったURLに遷移させたい場合にどう定義するのか?となりました。
ここが+αで学べた点です!!

「%5B%5D=〇〇」、「%3A」⇦これらが何かというと、URLのエンコードでそれそれ記号などの意味を持ちます。

以下、URLエンコードの一例

  • ? → %3F
  • @ → %40
  • [ → %5B
  • ] → %5D

参考:TECHNICAL MANUAL

例えばこんなURLが生成されていたら?

https://〇〇/users?group_id%5B%5D=1&team_id%5B%5D=2

上記エンコードを参考に記述してみると、以下のような引数になります。

こんな感じ
= link_to users_path(group_id: [: 1], team_id: [: 2])

こんな感じ
= link_to users_path(group_id: [: 1], team_id: [: 2]), target: '_blank' do
 = image_tag 'imgae/yahoo-logo'

突然ですが、ここでもう一つ例を。

Q. 以下、パラメータを持つURLですが、どのようにlink_toを定義すれば、生成できるでしょうか。?

https://〇〇/?visit_date=2021-07-17&visit_time=19%3A00&expand_visit_minutes=60&num_guests=2

A. おそらくこんな感じじゃないかなと!(答えはわかりません..)

= link_to 〇〇_path(visit_date: '2021-07-17', visit_time: '19:00', expand_visit_minutes: '60', num_guests: '2')

まとめ

本日のポイントのまとめです。これらがわかってしまえば簡単なものです!

  • 任意のパラメータが入ったURLに画面遷移させるやり方は、pathの引数にパラメータを定義する!
  • %5B%5Dは、エンコードで変換されてるだけなので、調べればすぐ解決!怖くない!

以上、お疲れ様でした。