我有成千上万条记录的数据库
Code | Name | Price
00106 | Water | 9.99
00107 | Onion | 8.99
编码在GES
如下文件中:
00F
表示列标题00I
表示插入一行
还有其他喜欢(00D
删除行或00U
更新)
00F
0101
02Code
031
00F
0102
02Name
031
00F
0103
02Price
030
00I
0100106
02Water
030999
00I
0100107
02Onion
030899
我想创建处理此文件并将其推送到我的数据库中的导入器。所以我开始实现:
class Importer
CONN = ActiveRecord::Base.connection
F = "00F"
I = "00I"
def extract_to_database(collection)
add = true
tmp = []
type = F
inserts = []
collection.each_with_index do |line, i|
_type = line.strip
_changed = [F,I].include? _type
if _changed && i > 0
case type
when F then @f << tmp
when I
group_id = Group.find_by(code: tmp[1]).id
inserts.push "(group_id,'#{tmp[2]}','#{tmp[3]}')"
end
tmp = []
type = _type
end
tmp << line
end
sql = "INSERT INTO products (`group_id`, `name`, `price`) VALUES #{inserts.join(", ")}"
CONN.execute sql
end
end
有一个问题,我想使用函数式编程来重构它。
而且我将不得不找到其他模型code
并将其放入与products
表相关的some_model_id
列中,这样会使整个过程复杂化。因为现在导入这些数据需要我几个小时。
也许使用 Ruby 并不是最好的选择。