🔍
【Rails】簡易的な検索機能
実装機能
- コントローラー
- ビュー
- モデル
- ルーティング
コントローラー
- searchesコントローラ追加
rails g controller searches
- searchアクション追加
searches_controller.rb
class SearchesController < ApplicationController
before_action :authenticate_end_user!
def search
@search_results = Facility.where("column_name LIKE ?", "%#{params[:search]}%")
end
end
※ column_name は自身で作成したもので検索したいカラム名を入れる。
ビュー
- 検索結果表示画面を作成し、検索結果を表示すること
- 今回は部分一致
検索フォームの作成+α
_form.html.erb
<%= form_tag(search_path, method: :get) do %>
<div class="form-group">
<%= text_field_tag :search, params[:search], placeholder: "検索キーワード" %>
<%= submit_tag "検索", class: "btn btn-primary" %>
</div>
<% end %>
部分テンプレートで作っているため、検索窓をおきたいページにrenderで記述する
<div>
<%= render "searches/form" %>
</div>
検索結果を表示するビューを作成
search.html.erb
<h1>検索結果</h1>
<ul>
<% @search_results.each do |result| %>
<!-- ここで検索結果の詳細を表示するコードを追加 -->
<li><%= result.clumn_name %></li>
<% end %>
</ul>
モデルへの記載
end_user.rb
.
.
# 検索機能
def self.search_for(content, method)
if method == 'perfect'
EndUser.where(name: content)
elsif method == 'forward'
EndUser.where('name LIKE ?', content + '%')
elsif method == 'backward'
EndUser.where('name LIKE ?', '%' + content)
else
EndUser.where('name LIKE ?', '%' + content + '%')
end
end
.
.
facility.rb
.
.
def self.search_for(content, method)
if method == 'perfect'
Facility.where(area_name: content)
elsif method == 'forward'
Facility.where('area_name LIKE ?', content + '%')
elsif method == 'backward'
Facility.where('area_name LIKE ?', '%' + content)
else
Facility.where('area_name LIKE ?', '%' + content + '%')
end
end
.
.
ルーティング
routes.rb
get 'search', to: 'searches#search', as: 'search'
Discussion