はじめに
検索機能の実装過程で新しい気づきがあったので記事に残しておきます。
よろしくお願いします。
自作のアクション
ここではRailsの7つのアクションとされるもの以外に、自分で作ったアクションのことを「自作のアクション」と呼んでいます。
今回検索機能を実装するにあたって、新たにコントローラーに「search」アクションというものを作成しました。
def search
@tweets = Tweet.search(params[:keyword])
end
コントローラーの中にこんな感じで記述しました。
モデルの方でこの中で使われているsearchメソッドは定義されていますが、今回は特に説明はしません。
memberとcollection
memberとcollectionはルーティングを設定するときに使用できる、URLや実行されるコントローラーを任意にカスタムできるものです。
例えばmemberを使ってルーティングを設定すると下記のようになります。
Rails.application.routes.draw do
resources :tweets do
member do
get 'search'
end
end
end
rails routesすると↓
Prefix Verb URI Pattern
search_tweet GET /tweets/:id/search(.:format) tweets#search
collectionを使用すると下記のようになります。
Rails.application.routes.draw do
resources :tweets do
collection do
get 'search'
end
end
end
rails routesでルーティング確認すると↓
Prefix Verb URI Pattern
search_tweets GET /tweets/search(.:format) tweets#search
この二つの違いは、URLの指定先に:idが含まれているか否かになります。
memberは:idあり。
collectionは:idなし。
終わりに
実装途中にこれ大事だ!と思い取り急ぎ記事にしました。
実際に実装した検索機能の手順は追って記事にしたいと思います。