我有这个场景,我需要一些设计建议,可能是一个小结构定义:
我有一个用户可以上传一个csv文件,并根据该文件的内容我必须填充数据库,听起来简单呃!
好到目前为止一切都那么好,现在问题是这个csv非常大,我的意思是它有大约100个 Headers 字段(听起来很疯狂),谁知道每个文件有多少条记录,但无论如何,到目前为止我们有这个csv上传和db人口 . 但是等等,这个csv文件需要根据字段(“DIVISION”)进行分类/分类 . 除法是一个整数列,根据它的值我需要确定这个csv属于哪个除法 . 到目前为止,我们有以下要求:
=> CSV file uploading
=> File classification based on div id
=> record insertion
此事仍未得到解决 . 分部本身进一步分为两种类型:REGULAR和PROMO
我有样品,其中我有每种类型的 Headers . 因此,我们还需要确定此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插件和一些后台作业集成,以便在后台进行所有处理和类型检查 .
我需要一些数据库设计/结构帮助这个因为我是一个新手 . 任何帮助都非常感谢,:) .
问候
1 回答
是的,您可以使用smarter_csv导入CSV文件 .
对于每个行,您将获得一个具有100个键/值对的散列,其中键是CSV文件中的 Headers (在可能的修改之后) .
为简单起见,假设CSV文件中的一列确定要在数据库中创建哪种记录,例如: “分裂”或“类型”
假设您尝试从CSV文件将广告数据上传到数据库,则需要相应地创建模型 . 如果您的100列永远不会更改名称,那么最好使用单表继承(STI)对其进行建模:
在上传控制器中,您需要执行以下操作:
您还可以从字符串
row_hash[:type]
创建类名,然后对结果类执行create
调用另见:Create Class from String