Ruby on rails Rails 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文件,并根据该文件的内容,我必须填充数据库,听起来很简单,嗯

好的,到目前为止还不错,现在的问题是这个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