😎

Rails|jQuery Ratyを利用して、投稿を星評価順に並び替える

2023/08/07に公開

要件

本の一覧ページで新着順で並ぶようにする
本の一覧ページで評価の高い順で並ぶようにする
本の一覧ページで新着順と評価の高い順の切り替えができる

前提

前回の記事の続きです。
https://zenn.dev/airiin/articles/8f28d8dad75961

訂正

前回の記事で、Booksテーブルの starカラムを string型で作成してしまいました。
しかし、今回数値として扱う場面があるので、float型に変更しました。

$ rails g migration ChangeStarDataToBook

マイグレーションファイルを作成し、内容を編集します。

20xx_change_data_star_to_book.rb
  def change
    change_column :books, :star, :float
  end

これでマイグレートすればOKです!

$ rails g db:migrate

https://qiita.com/yana_dev/items/c96594bbea3329ef0fec

books_controller を編集

books_controller.rb
  def index
    @books = Book.all.order(params[:sort])
    @book = Book.new
  end

今回は本の一覧ページにだけ変更を加えたいので、indexアクションを編集します。
@books = Book.all
@books = Book.all.order(params[:sort]) に変更しました。

books/index ビューの編集

books/index.html.erb
      <h2>Books</h2>
      <%= link_to "新しい順", books_path(sort: 'created_at DESC') %> 
      |
      <%= link_to "評価の高い順", books_path(sort: 'star DESC') %>
      <%= render 'index', books: @books%>

ビューはこのように変更しました。
link_to の第2引数に(params[:sort])を追加します。

DESC は 降順という意味です。

これで、「新しい順」「評価の高い順」に並び替えることができるようになりました!

参照

https://zenn.dev/goldsaya/articles/9156b88d7fe458

Discussion