阿罗哈,一如既往,非常感谢任何帮助。我导入CSV并在标题中我有全部大写和冒号(例如,EXT:MAT:PIDTC是一个)。我将如何在途中操纵标题?也许我想将上面的例子更改为thisHeader或者其他东西以与我的SpiritTrial模型中的my: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
答案 0 :(得分:1)
CSV.foreach
&amp;合。取一个:header_converters
option,它应该是一个Proc或Proc数组,它以标题作为参数并返回该标题的新值。举个例子,你会做这样的事情:
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