Method: ActiveRecord::QueryMethods#unscope!

Defined in:
activerecord/lib/active_record/relation/query_methods.rb

#unscope!(*args) ⇒ Object

:nodoc:



811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
# File 'activerecord/lib/active_record/relation/query_methods.rb', line 811

def unscope!(*args) # :nodoc:
  self.unscope_values += args

  args.each do |scope|
    case scope
    when Symbol
      scope = :left_outer_joins if scope == :left_joins
      if !VALID_UNSCOPING_VALUES.include?(scope)
        raise ArgumentError, "Called unscope() with invalid unscoping argument ':#{scope}'. Valid arguments are :#{VALID_UNSCOPING_VALUES.to_a.join(", :")}."
      end
      assert_modifiable!
      @values.delete(scope)
    when Hash
      scope.each do |key, target_value|
        if key != :where
          raise ArgumentError, "Hash arguments in .unscope(*args) must have :where as the key."
        end

        target_values = resolve_arel_attributes(Array.wrap(target_value))
        self.where_clause = where_clause.except(*target_values)
      end
    else
      raise ArgumentError, "Unrecognized scoping: #{args.inspect}. Use .unscope(where: :attribute_name) or .unscope(:order), for example."
    end
  end

  self
end