我完成了将csv文件导入MySql数据库的任务。但现在我的要求是: 1. csv文件的行和列应与MySql数据库的行和列匹配,这样如果缺少任何行或列,则应引发错误:“缺少@ row1或第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 -%>
请帮帮我......
答案 0 :(得分:-1)
我和你现在的人做了同样的工作。但是我不认为这是一个非常好/直接/简洁/优雅的解决方案,因为这(验证CSV文件)不是一个非常好的要求,对我而言,它与数据库/的“版本控制”相同楷模。它可能会破坏您的所有代码,特别是对于那些不是专家的人。
好的,投诉完成了。让我分享我的解决方案:
通过javascript。我没有以这种方式实现它,但是比较我所做的,我更喜欢这种方式。步骤是:
通过远程ruby代码:我这样做了,发现它不是很好(也许我使用了很多js函数......脏,不优雅,难以测试,反应慢,ajax ...等等)如果您这样做,请使用普通的html页面,而不是“对话框”或“模态窗口”。