Rails で member ルーティングを使ってみる
Ruby Ruby on Rails
Published: 2019-08-04

やったこと

Rails で member ルーティングを使ってみます。

以下は Rails ガイドからの引用です。

デフォルトで作成されるRESTfulなルーティングは7つですが、7つでなければならないということはありません。必要であれば、コレクションやコレクションの各メンバーに対して適用されるリソースを追加することもできます。

確認環境

$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]

$ rails --version
Rails 5.2.3

調査

コード追加

config/routes.rb

Rails.application.routes.draw do

  resources :hello do
    get 'index', action: :index
    get '(/:id)/show2', action: :show2
    get 'show3', on: :member
  end
end

app/controllers/hello_controller.rb

class HelloController < ApplicationController
  def index
  end

  def show2
    render :json => {ver: 2, id: params[:hello_id]}
  end

  def show3
    render :json => {ver: 3, id: params[:id]}
  end
end

結果を確認する

ルーティングを確認してみる

$ rails routes | grep -E "/hello" | grep "show."
                          GET    /hello/:hello_id(/:id)/show2(.:format)                                                   hello#show2
              show3_hello GET    /hello/:id/show3(.:format)                                                               hello#show3

パラメータの取得方法が変わっています。

member ルーティングでは id となっています。

下記の URL にアクセスすると、パラメータが取得できていることが確認できます。

http://localhost:3000/hello/1000/show2

http://localhost:3000/hello/1000/show3

参考