class AssociationScope::Scope::HasAndBelongsToManyReflection

Public Instance Methods

apply() click to toggle source
# File lib/association_scope/scope/has_and_belongs_to_many_reflection.rb, line 6
      def apply
        association = @association.pluralize
        details = model.reflections[association]
        class_name = details.options[:class_name]&.constantize || association.singularize.camelize.constantize
        table_name = model.to_s.underscore.pluralize.to_sym

        model.class_eval <<-RUBY, __FILE__, __LINE__ + 1
          raise AssociationMissingError.new(missing_in: class_name, association: table_name) unless class_name.reflections.has_key?(table_name.to_s)

          scope association, -> do
            class_name
              .joins(table_name)
              .where(table_name => self)
              .distinct
          end
        RUBY
      end