今回は投稿内容を絞り込みで表示してみましょう
##目次
1.前提
2.whereメソッドについて
3.コントローラー記述
4.ビュー記述
5.ルート記述
###1.前提
今回は既に投稿と一覧ができる状態であることとします。
例としては下記のような状態であるとします。
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
<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>
<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 %>
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が「マク○ナルド」のものを絞り込む場合のコードを書いていきます。
#省略
def mac
@burgers = Burger.all
@mac = Burger.where(shop_name:"マク○ナルド")
end
#省略
where(カラム名:"絞り込む名前")
という形で書いています。
###4.ビュー記述
次にビューを書いていきます。
今回は新しくmac.html.erbを作成した場合で書いていきます。
<%= link_to "マク○ナルドへ", burgers_mac_path %>
まずはindexに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.ルート記述
Rails.application.routes.draw do
root 'burgers#index'
#追記
get 'burgers/mac' => 'burgers#mac'
#ここまで
resources :burgers
end
###終わり
以上です!