🙌
[Rails]sort機能の実装方法
今回実装する機能は,このような感じ。
- 新しい順
- 古い順
- 評価の高い順
子の三つで並び替えができるようにsort機能の実装を行なっていきます。
<手順>
- モデルにカラムデータの取り出し方指示の記述
- コントローラーのアクションの追記
- 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