Curious what you think about:

    def accept_headers
      raw_accept_header.split(/, ?/).map {|ct| extract_type_from(ct) }
    end

    def extract_type_from(content_type_string)
      content_type_string.split(/; ?/).first
    end

    def raw_accept_header
      request.env['HTTP_ACCEPT'] || ''
    end

That last method could be written as:

    def raw_accept_header
      request.env['HTTP_ACCEPT'].to_s
    end

but I thought that the first version specified intent better.