2017-02-17 2 views
0

Aloha, как всегда, любая помощь очень ценится. Я импортирую CSV, а в заголовках у меня есть все кепки и двоеточия (например, EXT: MAT: PIDTC - один). Как я буду манипулировать заголовками на пути? возможно, я хочу изменить приведенный выше пример thisHeader или что-то, что соответствует моему атрибуту: thisHeader в моей модели SpiritTrial.манипулировать заголовками на csv import ruby ​​on rails

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

ответ

1

CSV.foreach & совместно. возьмите :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 

Вы можете увидеть пример SANs Rails на repl.it: https://repl.it/FoAj