以下記事の続きとして
質問一覧画面の表示を回答数0のものを表示させる方法を追記
追記箇所
以下ファイルに 回答数0の場合を追記する。
app/controllers/posts_controller.rb
class PostsController < ApplicationController
def index # 質問一覧を表示する画面
@posts = Post.all
@range = params[:range] # 並べ替え選択時のページネーションを場合分け
case @range
...
(~省略~)
...
when "回答数0"
@posts = Post.left_joins(:answers).where(answers: {member_id: nil}).page(params[:page]).per(10)
end
end
.....
ロジックとしては
postモデルに関連するanswerモデルの(member_id)カラムが存在しないものを抽出している
このようにすることで回答がない質問を選ぶことができる。
該当viewファイルにはプルダウンメニューの選択肢として
["回答数0"]
を追記しておく
app/views/posts/index.html.erb
<%= form_with url: posts_path, local: true, method: :get do |f| %>
<%= f.select :range, options_for_select([['投稿Noが新しい順に'],['投稿Noが古い順に'],['更新日時が新しい順に'],['更新日時が古い順に'],["回答数の多い順に"],["回答数の少ない順に"],["回答数0"]]) %>
<%= f.submit "回答並べ替え", class: "btn btn-dark", data: {"turbolinks"=>false} %>
<% end %>
結果
上記のように追記すると"回答数0"のプルダウン選択時に
回答数0の質問一覧だけを表示させることができる。
以下は余談となるが
「.order(updated_at: 'DESC')」を追加したりすれば
回答数0の中でさらに更新日時順並びなどの条件を指定したりできる
@posts = Post.left_joins(:answers).where(answers: {member_id: nil}).order(updated_at: 'DESC').page(params[:page]).per(10)