🚶

昇順と降順[scope]

2024/06/09に公開

今回は簡単な投稿日順のみ🥺
モデルに先に書くバージョン

model
scope :latest, -> { order(created_at: :desc) }  #desc = 降順
scope :old, -> { order(created_at: :asc) }  #asc = 昇順

😗 { scope名は任意だけど他の人もわかりやうい名前にはしようね!

scope名(例) 意味
latest 新着順
old 古い順
most_favorited いいね順
star_count 評価順

desc = 降順 (大→小 / 古→新)
asc = 昇順 (小→大 / 新→古)


controller(book)
if params[:latest]
     @books = Book.latest
    elsif params[:old]
     @books= Book.old
    else 
      @books =Book.all
    end 

🫨 {Book.allが既に定義されるときは消す!コメントにして確認がおすすめ⭐️

view
<%= link_to '新着順', posts_path(latest: "true") %>
<%= link_to '古い順', posts_path(old: "true") %>

私はボタンにしたかったので

<button type="button" class="btn btn-light">
  <%= link_to '▶︎新着順', books_path(latest: "true")%>
</button>
<button type="button" class="btn btn-light">
 <%= link_to '▶︎古い順', books_path(old: "true") %>
</button>

にして見ました🥱
https://getbootstrap.jp/docs/5.3/components/buttons/
文字色白にしたかったけどわからなかったので、もう少し調べて実装してみようかな

やっぱり見た目変えれると楽しいなあ!

@orders = Order.includes(:customer, :order_details).order(created_at: :desc)

includesはN+1問題を解消するため!!!

Discussion