😎
Rails|jQuery Ratyを利用して、投稿を星評価順に並び替える
要件
本の一覧ページで新着順で並ぶようにする
本の一覧ページで評価の高い順で並ぶようにする
本の一覧ページで新着順と評価の高い順の切り替えができる
前提
前回の記事の続きです。
訂正
前回の記事で、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
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
は 降順という意味です。
これで、「新しい順」「評価の高い順」に並び替えることができるようになりました!
参照
Discussion