0
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.

検索フォームを作成 Rails

Posted at

検索フォームの作り方が分からず非常に苦労したため備忘録として残しておく。

検索の流れ

  1. 検索フォームへキーワード入力
  2. 該当するページへ遷移
  3. キーワードを入れずに検索した場合は全データを表示

viewに検索フォームを記述

index.html.erb

 <%= form_tag search_path, method: :get do %>
  <%= text_field_tag :search, params[:search], class: '適宜', placeholder: '適宜' %>
  <%= submit_tag 'search' %>
 <% end %>

form_tag: モデルに基づかないformを作る際に利用 ※検索機能ではこちらを使う
form_for: 任意のモデルに基づいたformを作る際に利用
methodをgetで指定

コントローラーにsearchアクションを追加

viewの検索formで取得したパラメータをモデルへ渡す

pages.controller
 def search
    @search = House.search(params[:search])
 end

モデルにsearchメソッドを記述

house.rb

 def self.search(search)
    return House.all unless search
     House.where(['city LIKE?', "%#{search}%"])
 end

①か②の記述(どちらも意味は同じ)


 def self.search(search)
   if search 
    House.where(['city LIKE?', "%#{search}%"])
   else
    House.all
   end
 end
  1. 上記のsearchメソッドはコントローラーに記述しても良いが、今後も同じような記述が増えた場合に、後日見返した時や他人が見た時にわかりにくいのでモデルに記述する。
  2. whereメソッドは、該当するデータを全て返すので検索結果を一覧で表示したい時に使う。
  3. cityの部分は検索をかける際のカラムを指定している
  4. "%#{search}%"は、"%検索したい文字列%"のように検索したい文字列の前後を%で挟むことで部分一致の検索ができる記述。

遷移先のviewに検索結果を表示する

search.html.erb
  <% @search.each do |house| %>
    <%= link_to house_path(house.id)%> 
  <% end %>

まとめ
コントローラーに記述しすぎるのはよくないので、適宜モデルに記述していくことで可読性を高める。

0
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
0
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?