LoginSignup
4
8

More than 3 years have passed since last update.

[Rails] 投稿一覧をカテゴリー別で表示する方法

Last updated at Posted at 2020-10-18

前提

  • Ruby 2.6.3
  • Rails 5.2.4.4
  • devise導入済(しなくてもいい)
  • 基本的なページは完成している
  • コントローラー名は今回gears
  • gearモデルにはcategoryカラムが存在する
  • 今回はログインユーザーにしか見えない投稿一覧なので、他ユーザーも閲覧できるようにしたい場合はuser_id: @user.idを省いてください。

やり方

Controller

編集前

gears_controller.rb
 def index
   @user = current_user
   @gear = Gear.where(user_id: @user.id)
 end

編集後

gears_controller.rb
  def index
    @user = current_user
    @gear1 = Gear.where(user_id: @user.id, category: "住居系")
    @gear2 = Gear.where(user_id: @user.id, category: "料理系")
    @gear3 = Gear.where(user_id: @user.id, category: "火周り系")
    @gear4 = Gear.where(user_id: @user.id, category: "その他")
  end

View

index.html.erb
<div class="category bg-success">住居系</div>
  <% @gear1.each do |gear| %>
    <div class="gear-index-item mb-20">
      <% if gear.image.attached? %>
        <%= image_tag gear.image, class: "index-img" %>
      <% else %>
        <img class="index-img" src="<%= "/images/default_gear.jpg" %>" alt="Index image cap">
      <% end %>
      <%= link_to(gear.name, "/gears/#{gear.id}") %>
    </div>
  <% end %>

  <div class="category bg-warning">料理系</div>
  <% @gear2.each do |gear| %>
    <div class="gear-index-item mb-20">
      <% if gear.image.attached? %>
        <%= image_tag gear.image, class: "index-img" %>
      <% else %>
        <img class="index-img" src="<%= "/images/default_gear.jpg" %>" alt="Index image cap">
      <% end %>
      <%= link_to(gear.name, "/gears/#{gear.id}") %>
    </div>
  <% end %>
   .
   .
   .

それぞれeach文で繰り返し処理を行う。

結果

image.png

まとめ

whereメソッドを使えば簡単に特定カラムでまとめられる!

4
8
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
4
8