LoginSignup
0
1

More than 1 year has passed since last update.

[rails]評価点ごと(星ごと)の一覧画面を実装

Posted at

はじめに

ポートフォリオ作成中に、評価された商品について、評価点ごとに商品を表示する機能を実装しようと試みました。
その際、ちょうどいい記事が見つからなかったので今回まとめてみました。

開発環境

ruby '3.0.0'
Rails 6.0.3.4

前提

下のような、評価をするためのモデル及びカラムが作成されており、投稿機能まで実装されているものとする。
ユーザが"ガジェット"を投稿するサイトにて、下のようなER図にてgadjet_pointを今回の評価点とする。
gadjet_table.png

今回は、下画像のように10段階評価されたものについて、点数ごとの一覧画面を作成することを目標とする.

スクリーンショット 2022-01-13 14.51.30.png

ルーティング

app/models/favorite.rb
class Favorite < ApplicationRecord
.
.
.
  resources :boards do
    member do
      get :stars
    end
  end
end

ボードコントローラに"stars"アクションを追加し、"stars"アクションにて、評価点(星の数)ごとの一覧画面を表示する。

ビューの作成

コントローラの前に、"stars"アクションを呼び出すビューを作成します。
今回は、した画像のようにヘッダーメニューから遷移できるようにする。
スクリーンショット 2022-01-13 15.18.17.png


<div class="dropdown">
    <button class="btn btn-secondary dropdown-toggle margin-left20" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
        Star
    </button>
    <div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
        <% i = 10 %>
        <% until i == 0 do %>
            <%= link_to "#{i}stars" , stars_board_path(id:i), class:"dropdown-item font-black" %>
            <% i -= 1 %>
        <% end %>
    </div>
</div>

繰り返し処理にて、最初に"10"を代入し、繰り返す度に-1する。
stars_board_path(id:i)→starsアクションを実行するパスに"id"を評価点として受け渡すようにする。

コントローラ

app/controlles/boards_controlle.rb
class Favorite < ApplicationRecord
.
.
.
    def stars
        @gadjets = Gadjet.where(gadjet_point: params[:id])
        @stars = params[:id]
    end
end

Gadjetモデルのデータからgadjet_point(カラム名)が受け渡された評価点(:id)であるものを抽出。

評価点ごとの一覧画面

stars.html.erb
<div class="album py-5 bg-light">
    <div class="container">
        <h1 class="text-center margin-bottom25"><%= @stars %></h1>
        <%= render "shared/gajets-list", gadjets: @gadjets %> 
               #評価点別に抽出した@gadjetsをひとつづつ表示するviewを呼び出し。ここはご自身で作成願います。
    </div>
</div>

結果、以下の画像のような評価点ごとの一覧画面が作成できる。
スクリーンショット 2022-01-13 15.52.10.png

終わりに

この実装方法は完全オリジナルであり、効率がより良い方法等があると思います。
間違い等がありましたら、コメントにてご指摘お願いいたします。
少しでも参考になれば幸いです。

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