Issue #9582 has been updated by James Gray. Status changed from Open to Rejected Yeah, I also looked at making this change, but the behavior of returning just the first line is documented: https://github.com/ruby/ruby/blob/trunk/lib/csv.rb#L672 I'm not sure if users of this library count on that or not. This change would alter the behavior of tables, so at the very least I think it would need to happen on a major version release. Tables are also editable, so deleting rows affects the results of what thismethod returns. Anyway, if you need the non-first row headers, you can always do: header_row = table.find { |row| !row.headers.empty? } headers = header_row && header_row.headers ---------------------------------------- Bug #9582: CSV#headers not giving expected results. https://bugs.ruby-lang.org/issues/9582#change-45657 * Author: arup rakshit * Status: Rejected * Priority: Normal * Assignee: * Category: * Target version: * ruby -v: - * Backport: ---------------------------------------- It seems something not working as expected in CSV. I tried to find the reason here , http://rxr.whitequark.org/mri/source/lib/csv.rb but I failed. require 'csv' content = <<_ key,fr edit,diter close,Fermer _ File.write('test',content) file = CSV.read('test', :headers => true) file.headers # => ["key", "fr"] file.to_a # => [["key", "fr"], ["edit", "diter"], ["close", "Fermer"]] content = <<_ key,fr edit,diter close,Fermer _ File.write('test1',content) file = CSV.read('test1', :headers => true) file.headers # => [] # <~~~~~~~~~~~ Is this a bug ? file.to_a # => [[], [], ["edit", "diter"], ["close", "Fermer"]] ---Files-------------------------------- 9582.patch (870 Bytes) -- http://bugs.ruby-lang.org/