0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【ruby on rails】回答数0の質問を表示

Last updated at Posted at 2021-12-10

以下記事の続きとして

質問一覧画面の表示を回答数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)
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?