ご回答いただけるとありがたいです。よろしくお願いします!
実現したいこと
・グループの参加人数が多い順にグループ一覧ページに表示されるようにしたい(実現済)
・グループの参加人数が0のグループもグループ一覧ページにに表示されるようにしたい
発生している問題
グループ一覧ページに、グループの参加人数が多い順に上から表示するように以下のようにコードを書きました。
※参加人数が同じ場合は、作成した順。
controller
1#groups 2def list 3 @groups = Group.joins(:group_users).group(:group_id).order('count(group_id) DESC').order('created_at ASC') 4end
参加人数0のグループのidは中間テーブルのgroup_usersテーブルのgroup_idカラムにはありません(当たり前ですが)。
上記のように書いた結果、参加人数が0のグループのgroup_idが取得できず、表示されなくなります。
※ちなみに
.joins(:group_users).group(:group_id).order('count(group_id) DESC')
を書かなければ、グループ一覧に参加人数0のグループも表示されます。
該当のソースコード
controller
1#groups 2def list 3 @groups = Group.joins(:group_users).group(:group_id).order('count(group_id) DESC').order('created_at ASC') 4end
views
1#list.html.erb 2<div class="group_lists"> 3 <h1>グループ一覧</h1> 4 <div class="group_list"> 5 <% @groups.each do |group| %> 6 <div class="group-container"> 7 <div class="upper-group-container"> 8 <div class="group-content-left"> 9 <div class="participation-button"> 10 <% if user_signed_in? %> 11 <% unless GroupUser.exists?(group_id: group.id, user_id: current_user.id) %> 12 <div class="no_participation"> 13 <%= link_to '参 加', join_group_path(group) %> 14 </div> 15 <% else %> 16 <div class="participation"> 17 <%= link_to '参加中', "#" %> 18 </div> 19 <% end %> 20 <% end %> 21 </div> 22 <div class="number_of_user"> 23 参加人数: <%= group.users.length %> #この行で参加人数を表示 24 </div> 25 </div> 26(省略)
以上になります。ご助言いただけると幸いです。
##追加(マイグレーションとモデル)
migration
1#groups 2class CreateGroups < ActiveRecord::Migration[6.0] 3 def change 4 create_table :groups do |t| 5 t.string :name, null: false, unique: true 6 t.string :content 7 t.references :user, foreign_key: true 8 t.timestamps 9 end 10 end 11end 12 13#group_users 14class CreateGroupUsers < ActiveRecord::Migration[6.0] 15 def change 16 create_table :group_users do |t| 17 t.references :group, foreign_key: true 18 t.references :user, foreign_key: true 19 t.timestamps 20 end 21 end 22end
model
1#Group 2class Group < ApplicationRecord 3 has_many :group_users 4 has_many :users, through: :group_users, dependent: :destroy 5 has_many :tweets, dependent: :destroy 6 belongs_to :user 7 8 validates :name, presence: true, uniqueness: true 9end 10 11#GroupUser 12class GroupUser < ApplicationRecord 13 belongs_to :group 14 belongs_to :user 15end
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/30 09:16