def method_missing(m, *args)
      if m.to_s =~ /^(.+)!$/
        send($1.to_sym, *args).tap {|q| @criteria, @options = q.criteria, q.options}
        self
      else
        super(m, *args)
      end
    end
def method_missing(m, *args)
      if m.to_s =~ /^(.+)!$/
        send($1.to_sym, *args).tap {|q| @criteria, @options = q.criteria, q.options}
        self
      else
        super(m, *args)
      end
    end
def method_missing ( m , * args ) if m . to_s =~ / / send ( $1 . to_sym , args ) . tap { | q | @criteria , @options = q . criteria , q . options } self else super ( m , args ) end end
Allow self-changing methods: where!, sort! etc.
Allow self - changing methods : where! sort! etc .