| 人気順 | 新着順 | 検索 |
というメニュー及び機能を実装しました。
内容はユーザーが投稿した記事です。
人気順は記事に対するいいね数(likes_conut)でソートさせ、新着順(created_up)は名前の通り記事が投稿された最新順です。
コントローラー(articles_controller.rb)
ruby
1class ArticlesController < ApplicationController 2 3 def index 4 params[:sort_param] = %w{likes_count created_at}.include?(params[:sort_param]) ? params[:sort_param] : 'likes_count' 5 @articles = Article.all.order "#{params[:sort_param]} DESC" 6 end
ビュー(common/_header.html.haml)
haml
1 %li.active 2 = link_to root_path(:sort_param => 'likes_count') do 3 %i.fa.fa-line-chart.tab-menu-icon 4 人気順 5 %li 6 = link_to root_path(:sort_param => 'created_at') do 7 %i.fa.fa-clock-o.tab-menu-icon 8 新着順 9 %li 10 = link_to articles_search_path do 11 %i.fa.fa-search.tab-menu-icon 12 検索
ビュー(articles/index.html.haml)
ruby
1- @articles.each do |article| 2 ここに処理
という形で実装をおこないました。link_toの引数に指定したパラメーターをアクションで受け取っています。
同じ処理、ビューだったので人気順と新着順に関しては同じindex action及びviewを参照するようにしています。
しかしJSで現在地を取得してメニューリンクの色を変えるという処理の実装の際、人気順と新着順は/?sort_param=likes_count
、/?sort_param=created_at
のようにクエリパラメーターで表示される一方検索はarticles/searchというパスで表示させているので、実装上不都合が生じ、そもそもこのrails側の処理がスマートではないのでは、、と思い始めました。
新着順を/new
、人気順を/ranking
というパスで指定してそれぞれアクションの中でソートのコードを書いてビューに出力させるという方法にしたほうがよいのでしょうか?
アドバイスお願いします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。