
Dinmukhamed
17.09.2018
09:31:38
Вот у меня такая ситуация, я вообще laravel разработчик. Но у меня сейчас задание на redmine перенести сотрудников с Active Directory на редмайн базу данных. У меня есть как бы скрипт который я испытал на простом таблице. А сейчас пишу плагин что бы мигрировать данные. Вот могу ли я использовать этот скрипт не создовая миграцию но с моделем или есть какое то другое решение? Есть .xlsx файл и roo библиотека с таким скриптом
require 'csv'
class Product < ApplicationRecord
def self.to_csv(options = {})
desired_columns = ["id", "name", "released_on", "price", "created_at"]
CSV.generate(options) do |csv|
csv << desired_columns
all.each do |product|
csv << product.attributes.values_at(*desired_columns)
end
end
end
def self.import(file)
spreadsheet = Roo::Excelx.new(file.path, extension: :xlsx)
spreadsheet.default_sheet = spreadsheet.sheets[0]
headers = Hash.new
spreadsheet.row(1).each_with_index{|header,i|
headers[header] = i
}
((spreadsheet.first_row + 1)..spreadsheet.last_row).each do |row|
id = spreadsheet.row(row)[headers['ID']]
product = Product.find(id) || new
#product.attributes = row.to_hash
product.name = spreadsheet.row(row)[headers['Name']]
product.released_on = spreadsheet.row(row)[headers['Release Date']]
product.price = spreadsheet.row(row)[headers['Price']]
product.created_at = spreadsheet.row(row)[headers['Created at']]
product.save!
end
end
end
Это в тестовом проекте, но я помню что у меня проблема была, когда я добавлял поле в форму когда его нет в миграции и она выдавала ошибку.