検索機能
検索機能
ビュー
<%= form_with(url: search_tweets_path, local: true, method: :get, class: "search-form") do |form| %> <%= form.text_field :keyword, placeholder: "投稿を検索する", class: "search-input" %> <%= form.submit "検索", class: "search-btn" %> <% end %>
searchにはcollectionかmemberを用いる。
collection: idを指定しない
member: idを指定する
この差がある。idによって検索範囲を狭めたい場合はmemberって感じ。
ルーティングに書く
resources :tweets do resources :comments, only: :create collection do get 'search' end end
モデルに書く
def self.search(search) if search != "" Tweet.where('text LIKE(?)', "%#{search}%") else Tweet.all end end
*モデルに書く理由
ビジネスロジック(データとのやりとりに関するメソッド)はモデルに書く。
likeについて
where('title LIKE(?)', "%c%") | cが含まれるタイトル |
self.searchについて
このselfはTweetもことだと思われる。コントローラーでTweet.searchとなっているので。
コントローラーに書く
def search @tweets = Tweet.search(params[:keyword]) end
keywordをモデルの引数(search)に渡してる。
処理の手順
検索フォームに入力して検索する(リクエスト)→ルーティングでsearchアクションに→コントローラーでsearchアクションを行う。モデルにメソッドが書いてるので→モデルへ。処理をしてビューに返す(レスポンス)