转换CSV标头在Ruby中不区分大小写

Sti*_*a B 7 csv ruby-on-rails lowercase uppercase

我有一个ruby导入到DB进程,它根据名为headers的数组检查标题.就目前而言,这些标题必须与它们在数组中出现的标题完全相同.不管他们是大写还是小写,我都希望他们被接受.

CSV.foreach(FILE, encoding:'iso-8859-1:utf-8', headers: true, skip_blanks: true) do |row| 

# check the header row, make sure all are acceptable
if count == 0
  row.headers.each do |header|
    if (!headers.include? header) and !header.nil? and header != ""
      log.error "#{header} is not a valid header"
       exit
    end
  end
 end
Run Code Online (Sandbox Code Playgroud)

目前接受:"Ast_A"但不接受:"ast_a"我尝试将代码从Convert hash key改为小写 - Ruby Beginner无济于事.我的问题是如何在导入期间使.csv导入标题行不区分大小写?

MrY*_*iji 7

您只需提供一个header_converter响应该call方法的对象,并将该header字符串作为参数接收:

converter = lambda { |header| header.downcase }
CSV.foreach([...], headers: true, header_converters: converter, [...]) do |row|
Run Code Online (Sandbox Code Playgroud)

所以现在所有已解析的CSV标题都是向下的.您只需将其与本地变量的下行版本进行比较即可headers