我的表字段名是小写的,我从CSV文件中得到的字段名是camelcase。有没有什么方法可以把哈希数组的键转换成小写?
下面是我现在拥有的代码:
CSV.foreach(file, :headers => true) do |row|
Users.create!(row.to_hash)
end这是失败的,因为键是驼峰大小写(我已经通过手动编辑文件使标题行全部小写来验证这一点)。
PS。另外,我想知道为什么地狱rails首先要考虑表字段名的大小写敏感性?
发布于 2011-11-02 20:29:33
您可以使用类似以下内容:
CSV.foreach(file, :headers => true) do |row|
new_hash = {}
row.to_hash.each_pair do |k,v|
new_hash.merge!({k.downcase => v})
end
Users.create!(new_hash)
end我没有时间去测试它,但是,你可以想一想。
希望能有所帮助
发布于 2013-04-03 22:06:00
您可以只对CSV使用header_converters选项:
CSV.foreach(file, :headers => true, :header_converters => lambda { |h| h.try(:downcase) }) do |row|
Users.create!(row.to_hash)
end把.try放进去很重要,因为空的头部会抛出异常。这比在每一行都这样做要好得多(也更快)。
发布于 2019-01-08 18:48:24
你可以简单的做
hash.transform_keys(&:downcase)将哈希键更改为小写,或者您也可以根据需要将哈希值转换为小写或大写。
hash.transform_values(&:downcase)或hash.transform_values(&:upcase)
hash = {:A=>"b", :C=>"d", :E=>"f"}
hash.transform_keys(&:downcase)
=> {:a=>"b", :c=>"d", :e=>"f"}https://stackoverflow.com/questions/7980206
复制相似问题