LoginSignup
0
1

More than 3 years have passed since last update.

Railsで検索機能を実装する(Gemなし)

Posted at

検索機能を実装したので備忘録

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> 

以上で検索機能の実装完了。

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