Ruby on rails Rails CSV数据库填充
我有这样一个场景,我需要一些设计建议,可能需要一些结构定义: 我有一个用户,可以上传一个csv文件,并根据该文件的内容,我必须填充数据库,听起来很简单,嗯 好的,到目前为止还不错,现在的问题是这个csv相当大,我的意思是它有大约100多个头字段(听起来很疯狂),谁知道每个文件有多少记录,但无论如何,到目前为止,我们有这个csv上传和数据库人口。但是等等,这个csv文件需要根据字段(“划分”)进行分类。Division是一个整数列,根据它的值,我需要确定此csv属于哪个分区。到目前为止,我们有以下要求:Ruby on rails Rails CSV数据库填充,ruby-on-rails,validation,csv,carrierwave,uploading,Ruby On Rails,Validation,Csv,Carrierwave,Uploading,我有这样一个场景,我需要一些设计建议,可能需要一些结构定义: 我有一个用户,可以上传一个csv文件,并根据该文件的内容,我必须填充数据库,听起来很简单,嗯 好的,到目前为止还不错,现在的问题是这个csv相当大,我的意思是它有大约100多个头字段(听起来很疯狂),谁知道每个文件有多少记录,但无论如何,到目前为止,我们有这个csv上传和数据库人口。但是等等,这个csv文件需要根据字段(“划分”)进行分类。Division是一个整数列,根据它的值,我需要确定此csv属于哪个分区。到目前为止,我们有以下
=> CSV file uploading
=> File classification based on div id
=> record insertion
这件事还没有解决。部门本身进一步分为两类:常规部门和促销部门
我有一些样本,每种类型都有标题。因此,我们现在还需要确定该csv属于哪个部门类型,然后开始处理
=> CSV file uploading
=> File classification based on div id and headers (counting and matching the headers for div-sub type using some already defined hash of headers for each division)
因此,在识别文件(即文件所属的分区和子类型)后,我需要对字段进行一些验证,例如,存在,然后进行一些格式检查等
我想使用carrierwave进行文件上传,使用smarter_csv gem进行csv处理,然后使用jquery插件进行前端文件处理和上传,比如jquery.fileupload插件和一些后台作业集成,在后台完成所有处理和类型检查
我需要一些数据库设计/结构的帮助,因为我是一个新手。非常感谢您的帮助,:)
关于是的,您可以使用smarter_csv导入您的csv文件 对于每一行,您将得到一个包含100+个键/值对的散列,其中键是CSV文件中的标题(经过可能的修改) 为简单起见,假设CSV文件中的一列确定要在数据库中创建的记录类型,例如“division”或“type” 假设您尝试将广告数据从CSV文件上载到数据库,然后需要相应地创建模型。如果您的100多个列从未更改名称,那么最好使用单表继承(STI)对此进行建模: 您还可以从字符串
行\u散列[:type]
创建类名,然后对结果类执行create
调用
另见:
class Ad < ActiveRecord::Base
...
end
class AdRegular < Ad
end
class AdPromo < Ad
end
require 'smarter_csv'{:chunk_size => 1} ) do |array|
row_hash = array.first
case row_hash[:type]
when 'regular'
AdRegular.create( row_hash )
when 'promotion'
AdPromo.create( row_hash )
else
puts "ERROR, unexpected :type in CSV file: #{row_hash[:type]}"
end
end