railsの並び替えで、デフォルト(一覧画面に来た時)はいいねの多い順、リンクをクリックすることで新着順と評価の高い順、いいねの多い順にそれぞれソートしたいです。
ビューとコントローラの記述で詰まっています。
初学者ですがよろしくお願いいたします。
Bookモデルには評価(star)カラムはありますが,いいねのカラムは作ってないです。
rails
1 2 <div class='col-md-8 offset-md-1'> 3 <h2>Books</h2> 4 <%= link_to "新しい順", books_path(sort_create: "true") %> | 5 <%= link_to "評価の高い順", books_path(sort_star: "true") %> | 6 <%= link_to "いいねの多い順", books_path(sort: 'favorite DESC') %> 7 <%= render 'index', books: @books %> 8 </div> 9 10 11``` controller 12 def index 13 @books = Book.most_favorite.order("favorites_count DESC").select("books.*") 14 if params[:sort_create] 15 @books = Book.latest 16 elsif params[:sort_star] 17 @books = Book.star 18 end 19 @user=current_user 20 @book=Book.new 21 end 22 23```model 24 scope :latest, -> {order(created_at: :desc)} 25 scope :star, -> {order(star: :desc)} 26 27 has_many :favorites, dependent: :destroy 28 has_many :week_favorites, -> { where(created_at: ((Time.current.at_end_of_day - 6.day). 29 at_beginning_of_day)..(Time.current.at_end_of_day)) }, class_name: 'Favorite' 30 31 scope :most_favorite, -> { left_joins(:favorites).select(:id, "COUNT(favorites.id) AS favorites_count").group(:id) }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。