検索機能を実装したので備忘録
#1.controllerへ処理を記載
/app/controllers/users/team_controller.rb
def search
@teams = Admin.search(params[:search])
#@teamsは好きなものを入力して、Adminの部分には検索したいテーブル名を入力する
end
検索欄に入力された内容をモデルに渡すための処理
#2.modelへsearchメソッドを定義
/app/models/admin.rb
def self.search(search)
if search
Admin.where(['address LIKE ?', "%#{search}%"])
#Adminには検索したいテーブル、addressには検索したいカラム名を入力する
else
Admin.all
#検索結果が当てはまらない場合は全て表示させる(必要ない場合は削除する)
end
end
#3.routingを設定
/config/routes.rb
get 'teams/search', to: 'teams#search'
必要であれば設定
#4.viewへform_tagを記載する
/app/views/users/teams/index.html.erb
<%= form_tag(teams_search_path,:method => 'get') do %>
<%= label_tag '地域で検索' %>
<%= text_field_tag :search %>
<%= submit_tag 'Search', :address => nil %>
<% end %>
この記述を検索機能を付けたいviewへ記述することで検索が可能になる
#5.search後のviewを作成
こちらに関しては検索前の一覧画面とほとんど同じで問題ないかと思う。
今作ってるものだとこんな感じ。
/app/views/users/teams/search.html.erb
<h2>チーム一覧</h2>
<table class="table table-striped bg-light">
<thead>
<tr>
<th>チーム</th>
<th>活動場所</th>
<th>メールアドレス</th>
<th>ジャンル</th>
</tr>
</thead>
<tbody>
<% @teams.each do |team| %>
<tr>
<td><%= link_to team.team_name, team_path(team) %></td>
<td><%= team.address %></td>
<td><%= team.email %></td>
<td><%= team.genre %></td>
</tr>
<% end %>
</tbody>
</table>
以上で検索機能の実装完了。