1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

新method追加2

Last updated at Posted at 2021-05-14

searchアクションのルーティングを設定しよう

今回はsearchという命名で、7つの基本アクション以外のアクションを定義します。

collectionmemberを学習します。

collectionとmember

collectionとmemberは、ルーティングを設定する際に使用できます。
これを使用すると、生成されるルーティングのURLと実行されるコントローラーを任意にカスタムできます。

collectionはルーティングに:idがつかない、memberは:idがつくという違いがあります。

1つずつ使用例を見ていきましょう。

【例】collectionで定義した場合

Rails.application.routes.draw do
  resources :tweets do
    collection do
      get 'search'
    end
  end
end

【例】collectionのルーティング

Prefix           Verb    URI                                 Pattern
search_tweets    GET    /tweets/search(.:format)              tweets#search

ルーティングに:idが付いていないことがわかります。

続いてmemberの場合を見てみましょう。

【例】memberで定義した場合

Rails.application.routes.draw do
  resources :tweets do
    member do
      get 'search'
    end
  end
end

【例】memberのルーティング

Prefix           Verb    URI                                 Pattern
search_tweet      GET    /tweets/:id/search(.:format)       tweets#search

URLの指定先が、collectionは:idなし、memberが:idありとなっていることが確認できますね。

今回の検索機能の場合、詳細ページのような:idを指定して特定のページにいく必要がないため、collectionを使用してルーティングを設定しましょう。

routes.rbを以下のように編集します。

config/routes.rb
Rails.application.routes.draw do
  devise_for :users
  root to: 'tweets#index'
  resources :tweets do
    resources :comments, only: :create
    collection do
      get 'search'
    end
  end
  resources :users, only: :show
end
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?