How to find a specific row in csv

Use .find

csv = CSV.read('sampler.csv', headers: true)

puts csv.find {|row| row['NAME'] == 'Tom'} #=> returns first `row` that satisfies the block.

Here's another approach that keeps the code within the CSV API.

csv_table is a CSV::Table
row is a CSV::Row
row_with_specified_name is a CSV::Row.

csv_table = CSV.table("./tables/example.csv", converters: :all)
row_with_specified_name = csv_table.find  do |row|
    row.field(:name) == 'Bahamas'
end

p row_with_specified_name.to_csv.chomp #=> "Bahamas,3,21,IT"

FYI, CSV.table is just a shortcut for:

CSV.read( path, { headers:           true,
                  converters:        :numeric,
                  header_converters: :symbol }.merge(options) )

As per the docs.