Rails の Routing で get や match を効果的に使う方法

Rails では Resource Routing: the Rails Default とあり、基本的には resources もしくは resource を使います。

では、 getmatch はどういう時に使うのか? について、私が使ってる例を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 などを含む場合

ちょうど良い例なので記事を紹介。

sinsoku.hatenablog.com

使い方

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 を使わない方が良いという記事もあるので、合わせて読んでおいた方がいいかも。

qiita.com