前提・実現したいこと
Userが複数のGroupに参加できるように中間テーブルUserGroupを持っています。
どのグループにも参加していないUserの一覧を作りたいです。
全Userに対してgropus.empty?だとsql数が多く非効率なので、いい方法があれば教えてください。
rails
1class User < ActiveRecord::Base 2 has_many :user_groups 3 has_many :groups, :through => :user_groups 4end 5 6class Group < ActiveRecord::Base 7 has_many :user_groups 8 has_many :users, :through => :user_groups 9end 10 11class UserGroup < ActiveRecord::Base 12 belongs_to :user, :foreign_key => 'user_id' 13 belongs_to :group, :foreign_key => 'group_id' 14end
画面イメージ
■ ばななグループ 佐藤・鈴木・田中 ■ いちごグループ 鈴木・西村 ■ 未所属 小川・松本・森・山本
該当のソースコード
rails
1content = ''.html_safe 2groups = Group.all 3groups.each do |group| 4 content << '■ ' << content_tag(:span, group.name) 5 group.users.each do |user| 6 content << content_tag(:span, user.name) 7 end 8end 9 10content << '■ 未所属' 11all_users = User.all 12all_users.each do |user| 13 if user.groups.empty? 14 content << content_tag(:span, user.name) 15 end 16end
試したこと
中間テーブルに登録されていないものを取得するクエリを知りたいです。
下記だと何かのグループに所属しているUserになってしまいます。
rails
1content << '■ 未所属' 2independents = User.joins(:user_groups) 3 .where.not(user_groups: {user_id: 'any'}) 4independents.each do |user| 5 content << content_tag(:span, user.name) 6end
補足情報(FW/ツールのバージョンなど)
ruby 2.6.7
rails 5.2.4.2
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/07 04:24