はじめに
筆者は 大学生限定 プログラミングコミュニティ 『GeekSalon』で活動している者です!
もし少しでも興味がありましたら、ぜひお話を聞きにきてくださいね♪
では本題。
YouTubeでよく人気順に並べ替えたり、最新の動画順に並べ替えたりしますよね!?!?
意外とこの部類の記事がなかったので、今回は似た機能を実装してみたので紹介しやあす!!
(いいね順はいいねを実装するのがちょっとめんどくさいので後ほど更新いたします、、、やってることは同じで応用するだけです)
もっとハイテクなやり方があるかもしれませんが、初心者でもできるような簡単なやり方で実装しています、ご理解くださいませぇ。
STEP1
viewで使うためにコントローラーで並べ替えた投稿を変数に代入します。
この時、条件分岐によって並べ替え検索の下準備をします。
def index
if params[:search] == ''
@posts= Post.all.order(id: "DESC")
elsif params[:search] == 'newpost'
@posts= Post.all.order(id: "DESC")
elsif params[:search] == 'oldpost'
@posts= Post.all
end
end
@posts= Post.all.order(id: "DESC")
は上からidが大きい順、つまり最新の投稿順にソートするためのコードです。
条件分岐を言葉で上から解説すると、、、
もし並べ替え検索欄に空文字が含まれている、つまり特に検索されていなければ最新順にソートした全ての投稿を@posts
に代入
もし並べ替え検索欄にnewpostという文字列が送られたら、最新順にソートした全ての投稿を@posts
に代入
もし並べ替え検索欄にoldpostという文字列が送られたら、古い順にソートした全ての投稿を@posts
に代入
STEP2
並べ替え検索のviewページを整えましょう。
<h3>並べ替え</h3>
<%= form_tag({controller:"posts",action:"index"}, method: :get) do %>
<%= select_tag("search", options_for_select([['---並べ替え選択---', ''], ['最新の投稿', 'newpost'], ['古い投稿', 'oldpost']])) %>
<%= submit_tag '並べ替える' %>
<% end %>
<% @posts.each do |t| %>
<%= t.body %>
<%= t.created_at %>
<% end %>
select_tag
を使って、特定のvalueを送っているのがミソですね!
最後に
いかがでしたでしょうかああああ
結構雑に書いちゃった&&いいね順めんどくさがってしまったので、時間取れた時にまた改修いたします🙇♂️
現段階で補足修正等ございましたら、編集リクエスト送ってくださいまし。
それではバイちゃ〜〜👋