🙌

[Rails]sort機能の実装方法

2023/02/10に公開

今回実装する機能は,このような感じ。

  • 新しい順
  • 古い順
  • 評価の高い順
    子の三つで並び替えができるようにsort機能の実装を行なっていきます。

<手順>

  1. モデルにカラムデータの取り出し方指示の記述
  2. コントローラーのアクションの追記
  3. viewに記述

1. モデルにカラムデータの取り出し方指示の記述をする

<book.rb>

scope :latest, -> {order(created_at: :desc)}
scope :old, -> {order(created_at: :asc)}
scope :star_count, -> {order(star: :desc)}
  • order...データの取り出しメソッド。取得したレコードを特定のキーで並び替える
  • desc・・・昇順
  • asc・・・降順
  • created_at...これはカラム名

ここで必須のscopeヘルパー

モデル側で共通の条件式(クエリ処理)に名前を付けて定義し、
その名前でメソッドのように呼び出すことができる仕組みのこと.
<基本型>

class モデル名 < ApplicationRecord
  scope :スコープの名前, -> { 条件式 }
end

補足1: カラムのターミナルでの確認方法

rails runner 'puts モデル名.column_names'
このコマンドで、ターミナルで確認可能!

補足2: タイムスタンプcolumn

私はcreated_atなんてカラム作成してないよ!?と感じた人いないですか?
これはTimestampカラムだから自動で作成してくれているものです!
DBレコードを作成・更新した日時を自動で記録してくれるカラム。
timestumpはRailsで元からある機能だよ!

2. コントローラーのアクションの追記

def index
:
省略
: 
    if params[:latest]
        @books = Book.latest
    elsif params[:old]
        @books = Book.old
    elsif params[:star_count]
        @books = Book.star_count
    else
        @books = Book.all
    end
:
end

@books = Book.latestこれらは、先ほど上で定義したものです。
if params[:latest]〜の文はviewで使用していきます。

3. viewに追加

<%= link_to '新しい順', books_path(latest: "true") %>
<%= link_to '古い順', books_path(old: "true") %>
<%= link_to '評価の高い順', books_path(star_count: "true") %>

これでsort機能は実装可能!
今日はこれから、今度はカテゴライズを行なっていきます!また夜投稿予定!

就職に向けてやることも増えてくるね。楽しみだね!ワクワク!早く仕事できるようになりたい!

Discussion