Как динамически добавлять атрибуты из csv-файла

Я новичок в Роре.
Я хочу динамически добавлять атрибуты из csv-файла, чтобы мой код мог динамически читать любой csv-файл и строить БД (т. е. конвертировать любой CSV-файл в объекты Ruby)

Я использовал код ниже

csv_data = File.read('myData.csv')
csv = CSV.parse(csv_data, :headers => true, :header_converters => :symbol)

csv.each do |row|
  MyModel.create!(row.to_hash)
end

Однако это не удастся для следующего примера

myData.csv

Name,id
foo,1
bar,10 

myData2.csv

Name,value
foo,1
bar,10

Это приведет к ошибке для myData2, потому что значение не является параметром в MyModel

неизвестный атрибут ‘value’ для MyModel.

Я думал об использовании send (: attrAccessor, name), но я не был уверен, как я могу интегрировать его при чтении из csv, какие-либо идеи ?

1 ответ

  1. Вы делаете это правильно, но вы также можете массово загружать записи

    csv_data = 
      CSV.read("#{Rails.root}/myData.csv", 
               headers: true,
               header_converters: :symbol
      ).map(&:to_hash)
    
    MyModel.create(csv_data)
    

    Примечание: если данные будут такими же, то вы можете использовать seeds.rb