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.

【Ruby on Rails】whereメソッドを使って投稿内容の絞り込み表示をしよう

Last updated at Posted at 2021-09-29

今回は投稿内容を絞り込みで表示してみましょう

##目次
1.前提
2.whereメソッドについて
3.コントローラー記述
4.ビュー記述
5.ルート記述

###1.前提
今回は既に投稿と一覧ができる状態であることとします。
例としては下記のような状態であるとします。

burgers_controller.rb
class BurgersController < ApplicationController

    def index
        @burgers = Burger.all
    end

    def new
        @burger = Burger.new
    end

    def create
        burger = Burger.new(burger_params)
        
        if burger.save
            redirect_to :action => "index"
        else
            redirect_to :action => "new"
        end
    end

    private
  def burger_params
    params.require(:burger).permit(:burger_name, :shop_name, :price, :adress)
  end
end
burgers/index.html.erb
<h3>Burger一覧</h3>
<div class="burgers-container">
  <% @burgers.each do |t| %>
    <div class="burger">
      <%= t.burger_name %>
      <%= t.shop_name %>
      <%= t.price %>
      <%= t.adress %>
    </div>
  <% end %>
</div>
burgers/new.html.erb
<h3>新規burger</h3>
<%= form_for @burger do |f| %>
  <div class="field">
    <%= f.label :burger_name %>
    <%= f.text_field :burger_name, :size => 30 %>
  </div>

  <div class="field">
    <%= f.label :shop_name %>
    <%= f.select :shop_name, 
    [["マク○ナルド", "マク○ナルド"], 
    ["モ○バーガー", "モ◯バーガー"], 
    ["バーガー○ング", "バーガー○ング"]], include_blank: "選択して下さい" %>
  </div>

  <div class="field">
    <%= f.label :price %>
    <%= f.number_field :price, :size => 10 %>
  </div>

  <div class="field">
    <%= f.label :adress %>
    <%= f.text_area :adress, :size => "30x2" %>
  </div>
  <%= f.submit "Burgerを投稿する" %>
<% end %>

<%= link_to "Burger一覧に戻る", burgers_path %>
routes.rb
Rails.application.routes.draw do
  root 'burgers#index'
  resources :burgers  
end

今回は shop_nameというカラムを元に、お店ごとの絞り込みをできるようにしていきます。

###2.whereメソッドについて
今回はwhereメソッドというものを使って絞り込みを実装します。

whereメソッドとは?:与えられた条件にマッチするレコードを全てしてくれる役割

これだけだと「??」ってなると思うので例をあげます。
テーブル内に下記の表のようなデータが入っているとします。

id shop_name adress price
1 マク○ナルド 東京 600
2 モ○バーガー 神奈川 700
3 バーガー○ング 埼玉 800
4 モ○バーガー 福岡 600
5 マク○ナルド 長崎 800
6 バーガー○ング 福岡 700

shop_nameが「マク○ナルド」のものを絞り込んだら1と5
priceが「600」のものを絞り込んだら1と4といった感じになります。
このように条件にあったレコードを返してくれるのがwhereメソッドです。
それではこれを用いて実際に絞り込みのコードを書いていきます。

###3.コントローラー記述

まずは1.前提にあったburgersコントローラーにいくつか追記していきます。
今回はshop_nameが「マク○ナルド」のものを絞り込む場合のコードを書いていきます。

burgers_controller.rb
#省略

    def mac
        @burgers = Burger.all
        @mac = Burger.where(shop_name:"マク○ナルド")
    end

#省略

where(カラム名:"絞り込む名前")
という形で書いています。

###4.ビュー記述

次にビューを書いていきます。
今回は新しくmac.html.erbを作成した場合で書いていきます。

burgers/index.html/erb
<%= link_to "マク○ナルドへ", burgers_mac_path %>

まずはindexにmac.html.erbに遷移するためのコードを書いてあげました。

mac.html.erb
<div class="burgers-container">
<h2>マク○ナルド</h2>
  <% @mac.each do |m| %>
    <div class="burger">
      <%= m.burger_name %>
      <%= m.shop_name %>
      <%= m.price %>
      <%= m.adress %>
    </div>
  <% end %>
</div>

###5.ルート記述

routes.rb
Rails.application.routes.draw do
  root 'burgers#index'
#追記
  get 'burgers/mac' => 'burgers#mac'
#ここまで
  resources :burgers  
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?