2
1

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 1 year has passed since last update.

Ruby on Railsでプルダウン検索機能を実装する(gem不使用)

Last updated at Posted at 2022-12-27

こんにちは。GeekSalonのプログラミング駆け出しメンターです。
今日はgem(ransack)を使用せずに実装できるプルダウン検索機能についての記事を書こうと思います。
初めて記事を書くので、温かい目で見てくださると嬉しいです。

目次

①前提
②開発概要
③実際のコード

前提

○開発環境
Ruby 3.0.4
Rails 6.1.6

○前提
・ ListでのCRUD機能実装済み
・ 新規投稿ページでプルダウン機能を実装

開発概要

①投稿時にプルダウンで選択した情報を、変数を使って検索をプルダウン式でかける。
②検索用のparamsをコントローラーで作成
・検索したいカラムの選択項目を検索バーにも作成する
③コントローラーで検索した結果だけを表示する変数を作る
・ビューに表示

実装イメージはこちら

ー投稿一覧ページー
スクリーンショット 2022-12-27 15.19.02.png

左上がプルダウン検索バーになっています。

スクリーンショット 2022-12-27 15.20.49.png

スクリーンショット 2022-12-27 15.19.50.png

選択して検索をかけると、検索条件に当てはまる投稿一覧を表示します。
検索結果も表示可能です。

ー新規投稿ページー

スクリーンショット 2022-12-27 15.48.39.png

このように新規投稿ページでもプルダウン選択で指定しておきます。

機能実装コード

コントローラー作成とモデル作成は省きます。

新規投稿(newページ)を作成する際、簡単なプルダウン選択を実装しておいてください。

new.html.erb
<%= form_for @list do |f| %>
      <div class="new_2_field">
        <%= f.label :price %>
        <br>
        <%= f.select :price, [["〜1000円", "〜1000円"], ["〜2000円", "〜2000円"], ["〜3000円", "〜3000円"], ["〜4000円", "〜4000円"]], include_blank: "選択して下さい" %>
        <br>
      <%= f.submit "投稿する" %>
<% end %>

selectタグを使ってこのようにプルダウン機能を実装します。

投稿一覧ページの実装

続いて実際に一覧ページで検索して表示するところを実装します。

まず検索して情報の受け渡しを行えるようにparamsを使って変数を定義します。

lists_controller.rb
def index
        @lists = List.all
        @searchprice = params[:search]
end

コントローラーで定義したら、実際に検索バーを作ります。

index.html.erb
<%= form_tag({controller:"lists",action:"index"}, method: :get) do %>
    <%= select_tag :search, options_for_select([["〜1000円","〜1000円"],["〜2000円","〜2000円"],["〜3000円","〜3000円"],["〜4000円","〜4000円"]]) %> 
    <%= submit_tag "絞り込み" %>
<% end %>

select_tagで先ほど指定したparamsを指定して、options_for_selectで検索する内容を指定します。その中身を検索する選択項目に自由に変えて実装してください。
※新規投稿ページで先ほど指定した内容と全く同じでないと検索かからないので注意してください。

次に実際に検索した条件での投稿表示のコードを実装していきます。

lists_controller.rb
 def index
        @lists = List.all
        @searchprice = params[:search]
        @search = @lists.where(price: @searchprice) #追加
end

投稿表示を行う変数を@searchで定義します。whereで条件を指定して、検索したいカラムを指定(price)して情報の受け渡しをするために先ほど定義した@searchpriceを定義しておきます。

そして最後にeachメソッドで投稿表示するだけ!

index.html.erb
<% @search.each do |s| %>
    <p><%= s.price %></p>  
  #表示したいものを中に書いてね!
<% end %>

whereで条件分岐した変数@searchをeachメソッドに入れて検索条件にあった投稿を表示します。

検索結果表示

最後に検索する際に選択したものを表示するために記述を加えます。

index.html.erb
検索結果:<%= params[:search] %>

情報の受け渡しをおこなっているparamsを表示することで選択した項目を表示することができます。

最後に

ransackを使ったとき、他のgemとの兼ね合いでエラーが出てつまづくことが多かった私からすると、こっちの方が実装早いなと思い今回記事を書きました。

初心者の方には実装しやすい機能だと思います。
またもっといい方法があれば教えていただけると初心者からするととても嬉しいです。
自分でももっといい方法があるのか試行錯誤していこうと思います。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?