Just do IT

思うは招く

Railsで独自アクションを特定のリソースフルルート内に追加する方法

idを持っていないルートの場合

まだidを持っていない、新規のリソースに対するルート(コレクションルート)を設定するとき。

  resources :books do
    collection do
      get 'search'
    end
  end

結果

f:id:K_Koh:20200211222910j:plain

booksのリソースフルルート(一般的な7つのルート)に加えて、1番上に/books/searchが追加されている。

対応するアクションはbooks#searchとなっていて、booksコントローラー内にseachアクションの記述があれば、/books/searchへユーザーがアクセスしたときにseachアクションが実行される。

onを使った簡易的な書き方もある。

  resources :books do
    get :search, on: :collection
  end

idを持つルートの場合

/books/:id/editのように、idを特定できるルートを「メンバールート」と呼ぶ。

  resources :books do
    member do
      get 'search'
    end
  end

さきほど書いたcollectionをmemberにしただけ。

結果(seachに該当するルートのみ)

search_book  
GET 
/ books/:id/search(.:format)
books#search

上からPrefix、HTTPメソッド、URIパターン、コントローラー名#アクション名となっている。

こちらも簡易的な書き方がある。

  resources :books do
    get :search, on: :member
  end

同じく、さきほど書いたcollectionをmemberにしただけ。

参照