一瞬「あれっ...」ってなったので備忘録
TL; DR
-
routes.rb
内でダイレクトルーティングで定義すればOK
バージョン
- Ruby:2.6.1
- Rails:5.2.3
タイトルにiOSと書いてますがAndroidも対応できます。ただのRoutingの話なので。
やりたいこと
- RailsがWebとモバイルアプリの両方のサーバサイドの役割を担っている
- モバイルアプリ内で、特定の画面に遷移させるURIスキームを使いたい
- メニューなどで表示されていないページへの遷移など
- 上記の例としてInstagramに「運営からのコメント」があり、チャットで操作説明を受ける画面に遷移させたいような目的があったとする
- ヘルパーリンク:
qa_chat
- URIスキーム:
instagram://qa_chat
- ヘルパーリンク:
解決策
routes.rb
routes.rb
で、以下のようなダイレクトルーティングを設定してあげれば良いです。
routes.rb
direct :qa_chat do
"instagram://qa_chat"
end
ヘルパーリンク
Railsと同一のViewでヘルパーリンクを利用する場合は、以下のように記述します。
sample.erb
<%= link_to qa_chat_url %>
ちなみにダイレクトルーティングについて、Railsガイドでは以下の部分に記載があります。
(このURIスキームについての記載はありませんが、あくまで参考までに)
小ネタ
外部URLもroutes.rbで変数として定義できる
ダイレクトルーティングといえば、こちらの使い方のほうが一般的です。
よく使う外部URLを変数定義して、Railsアプリケーション内で使うことができます。
サービスLPのURLを記述する時は、個別にではなく、routes.rb
にまとめて記述するほうが管理しやすいです。
example.rb
direct :homepage do
"http://www.rubyonrails.org"
end