ransackを使わない簡易検索機能です。
ルーティング
routes.rb
Rails.application.routes.draw do
resources :tweets do
collection do
get 'search'
end
end
end
実際生成されるルーティングがこちら。
ターミナル
Prefix Verb URI Pattern Controller#Action
search_tweets GET /tweets/search(.:format) tweets#search
ビュー
検索フォームを好きなところへ配置。
search.html.haml
= form_with(url: search_tweets_path, local: true, method: :get) do |form|
= form.text_field :keyword
= form.submit
コントローラー
app/controllers/tweets_controller.rb
def search
@tweets = Tweet.where('text LIKE(?)', "%#{params[:keyword]}%").page(params[:page]).per(3)
end
ページネーションで3件ごとに取ってきています。
.limit(3)
とかで上から3件取ってきてもいいですね。
whereの中身はあいまい検索といいます。
where('カラム名 LIKE(?)', "検索したいワード")
検索ワードに引っかかるものを取ってきます。
%a%
とするとaを含むもの
%b
とするとbから始まるもの
今回はフォームに入力されたワードを含むツイートが表示されます。
ではまた!