# frozen_string_literal: true class UserAssociatedGroup < ActiveRecord::Base belongs_to :user belongs_to :associated_group after_commit :add_to_associated_groups, on: %i[create update] before_destroy :remove_from_associated_groups def add_to_associated_groups associated_group.groups.each do |group| group.add_automatically(user, subject: associated_group.label) end end def remove_from_associated_groups Group .where( "NOT EXISTS( SELECT 1 FROM user_associated_groups uag JOIN group_associated_groups gag ON gag.associated_group_id = uag.associated_group_id WHERE uag.user_id = :user_id AND uag.id != :uag_id AND gag.group_id = groups.id )", uag_id: id, user_id: user_id, ) .each { |group| group.remove_automatically(user, subject: associated_group.label) } end end # == Schema Information # # Table name: user_associated_groups # # id :bigint not null, primary key # user_id :bigint not null # associated_group_id :bigint not null # created_at :datetime not null # updated_at :datetime not null # # Indexes # # index_user_associated_groups (user_id,associated_group_id) UNIQUE # index_user_associated_groups_on_associated_group_id (associated_group_id) # index_user_associated_groups_on_user_id (user_id) #