【问题标题】:manipulate headers on csv import ruby on rails操纵 csv 上的标题 import ruby​​ on rails
【发布时间】:2017-07-07 10:42:46
【问题描述】:

Aloha,一如既往,非常感谢任何帮助。我正在导入一个 CSV,并且在标题中我有所有的大写和冒号(例如,EXT:MAT:PIDTC 是一个)。我将如何在进入的过程中操纵标题?也许我想将上面的示例更改为 thisHeader 或与我的 SpiritTrial 模型中的 :thisHeader 属性相匹配的内容。

class SpiritTrial < ActiveRecord::Base
 def self.import(file)
  CSV.foreach(file.path, headers: true) do |row|
   SpiritTrial.create! row.to_hash
  end
 end
end

【问题讨论】:

    标签: ruby-on-rails ruby csv import


    【解决方案1】:

    CSV.foreach & co.取一个:header_convertersoption,它应该是一个Proc 或Procs 数组,它以一个标头作为参数并为该标头返回一个新值。鉴于你的例子,你会做这样的事情:

    class SpiritTrial < ActiveRecord::Base
      CSV_HEADER_MAP = {
        "EXT:MAT:PIDTC" => :thisHeader,
        # ...
      }
    
      CSV_HEADER_CONVERTER = ->(header) { HEADER_MAP.fetch(header, header).to_sym }
    
      def self.import(file)
        CSV.foreach(file.path, headers: true, header_converters: CSV_HEADER_CONVERTER) do |row|
          SpiritTrial.create! row.to_hash
        end
      end
    end
    

    您可以在 repl.it 上看到一个没有 Rails 的示例:https://repl.it/FoAj

    【讨论】:

      猜你喜欢
      • 2018-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-14
      • 2016-03-24
      相关资源
      最近更新 更多