0

我完成了将 csv 文件导入 MySql 数据库的任务。但现在我的要求是: 1. csv 文件的行和列应该与 MySql 数据库的行和列匹配,这样如果缺少任何行或列,它应该会引发错误:“Missing @row1 or column 2”.. 2 . 在我的代码中,表头即名称、位置、城市等;标题经常在每次导入时重复。

我的代码如下:

def load_csv

end

 def import_csv
csv=params[:file].read
n=0
parsed_file = CSV.parse(csv)
parsed_file.each  do |row|
i=User.new
i.name = row[0]
i.location = row[1]
i.city = row[2]
if i.valid?
i.save
n=n+1
GC.start if n%50==0
flash[:notice] = "CSV Imported Successfully, with  #{n} records"                                
end
end

在视图中:

<%= form_for(:user, :url => import_csv_user_path,  :html => {:multipart => true}) do |f| %>
 <table>
<tr>
<td>
<label for="dump_file">
Select a CSV File :
</label>
</td>
<td ><%= file_field_tag :file -%></td>
</tr>
<tr>
<td colspan='2'><%= submit_tag 'Submit' -%></td>
</tr>
</table>
<% end -%>

请帮帮我......

4

1 回答 1

-1

我和你现在的工作一样。但是我不认为这是一个非常好的/直接/简洁/优雅的解决方案,因为这(验证 CSV 文件)不是一个很好的要求,对我来说它与数据库的“版本控制”相同/楷模。它可能会弄乱你所有的代码,特别是对于那些不是专家的人。

好的,投诉完毕。让我分享我的解决方案:

  1. 通过 javascript。我没有以这种方式实现它,但是比较我所做的,我更喜欢这种方式。步骤是:

    1. 读取本地 csv 文件(参考 jasmine 加载测试夹具的方法)。
    2. 验证 csv 和数据库表之间的列。
    3. 显示结果。如果不通过,给用户警告信息。
  2. 通过远程的 ruby​​ 代码:我是这样做的,发现它不是很好(也许我使用了很多 js 函数......脏,不优雅,难以测试,响应慢,ajax ......等)如果你这样做,请只使用普通的 html 页面,而不是“对话框”或“模式窗口”。

    1. 更新文件到远程服务器。
    2. 验证远程服务器中的 csv 文件。
    3. 如果验证失败,则向用户发出警告消息。
于 2012-04-13T07:34:25.033 回答