Подтвердить что ты не робот

Обновить имена столбцов в классе модели ActiveRecord

У меня есть script с использованием ActiveRecord, который динамически создает имена столбцов на основе значений, считанных из файла CSV, примерно так:

FasterCSV.foreach('votes.csv', :headers => true) do |row|
  column_name = "roll_call_id_#{row['roll_call_id']}"

  if !Legislator.columns.map(&:name).include?(column_name)
    connection_pool.connection.add_column('legislators', column_name, 'string')
  end
end

Проблема заключается в том, что после создания нового столбца я не могу сделать legislator.update_attribute(column_name, value), потому что класс не поднимает новый столбец и жалуется, что он не существует.

Как я могу заставить его снова запросить структуру таблицы?

4b9b3361

Ответ 2

как отметил obvio171, это довольно легко:

Вам нужно создать открытый класс класса.

Затем в процессе миграции вам нужно вызвать MyModel.reset_column_information, так что информация столбца перезагружается, так что с новой таблицей, которую вы только что создали (или изменили)

Затем вы можете использовать только каждый метод для создания новых записей.

Я использую что-то вроде:

data = [[1,'foo'], [2,'bar'],[3,'zip']].map{|a,b| {id:a, txt:b} }
MyModel.create!(data)

Но если ваши данные семян больше нескольких констант, то вы, вероятно, не должны обрабатывать ваши данные таким образом.