Rails では Resource Routing: the Rails Default とあり、基本的には resources
もしくは resource
を使います。
では、 get
や match
はどういう時に使うのか? について、私が使ってる例を3つ紹介します。
1. gem などで使う場合
intridea/omniauth のように公式の使い方が get
を使っている場合、無理に resource
とか使っても分かり辛くなるので、そのまま書きます。
get '/auth/:provider/callback', to: 'sessions#create'
2. URL構造が読みやすくなる場合
URL に日時などを含める場合、 get
を使うことがあります。
resources :articles, except: :show do get ':year/:month' => 'articles#show', on: :collection end
3. URL に別サービスの URL などを含む場合
ちょうど良い例なので記事を紹介。
使い方
https://circleci-latest-artifact.herokuapp.com/:username/:project/:branch/:filename?circle_token=:token みたいなURLを叩くと、自動的に :filename のURLにリダイレクトします。 これでArtifactのリンクをREADMEに書いておけるようになります。
こんな感じで、他サービスに依存する URL などを含む場合に *path
のような記法を使うと便利だったりします。
get ':username/:project/:branch/*filename' => 'artifacts#show', format: false
もし他サービスの proxy みたいなものを作りたい場合は match
を使う。
match 'proxy/*path' => 'proxy#show', via: [:get, :post, :put, :patch, :delete]
こうすれば、コントローラーで request.method
を使ってメソッドを取ることができる。
おまけ
Resource Routing を使わない方が良いという記事もあるので、合わせて読んでおいた方がいいかも。