将用户 .csv 文件中的数据导入表中
Posted
技术标签:
【中文标题】将用户 .csv 文件中的数据导入表中【英文标题】:Import data from user .csv file into table 【发布时间】:2015-11-14 03:09:03 【问题描述】:在 Ruby on Rails Web 应用程序中,我想从用户导入 .csv 文件,并且 .csv 文件中的数据将插入到 questions
表中,但运行时出现错误应用程序。
当我删除在question.rb
和html.erb
文件中编写的代码时,应用程序运行良好。
控制器代码: questions_controller.rb
class QuestionsController < ApplicationController
filter_access_to :all
def import
@question = Question.new
@question.import(params[:file])
CSV.foreach(file.path, headers: true) do |row|
@question.save! row.to_hash
end
redirect_to root_url, notice: "Questions imported succefully."
end
end
型号代码: question.rb
def self.import(file)
CSV.foreach(file.path, headers: true) do |row|
@question.save! row.to_hash
end
end
查看代码: question_type_listing.html.erb
<fieldset class="formContainer">
<legend><%=t('question.select_qtype_cat')%></legend>
<%= form_tag(:action => "import", :id => "class_form", multipart: true) do %>
<span style="width: 130px; float: left;"><p><label for="upload_file">Select File</label> :</span>
<%= file_field_tag :file %>
<%= submit_tag "Import CSV" %>
<% end %>
</fieldset>
有人可以提出解决此问题的方法吗?
【问题讨论】:
你的逻辑看起来很奇怪。 @question 是 Question 的一个实例。然后你将每一行一次又一次地保存到同一个实例中。 请阅读关于 ruby 编程的教程。它将教您类及其实例之间的区别。然后看看这个:railscasts.com/episodes/396-importing-csv-and-excel @gaurav.singharoy 兄弟,请帮我做这件事。请告诉代码如何将 .csv 文件添加到问题表中,或者如果意味着我们可以使用,我们可以使用 sql 查询。我是红宝石新手。 【参考方案1】:案例 1:
如果你想把所有问题都保存在.csv中,只需要以下控制器questions_controller.rb
代码即可实现,不需要question.rb
函数import
:
def import
file = params[:file]
CSV.foreach(file.path, headers: true) do |row|
@question = Question.new
@question.save! row.to_hash
end
redirect_to root_url, notice: "Questions imported succefully."
end
案例 2:
如果您希望代码在模型中(Rails 约定),请编写控制器questions_controller.rb
:
def import
Question.import(params[:file])
redirect_to root_url, notice: "Questions imported succefully."
end
和型号question.rb
def self.import(file)
CSV.foreach(file.path, headers: true) do |row|
question = Question.new
question.save! row.to_hash
end
end
【讨论】:
以上是关于将用户 .csv 文件中的数据导入表中的主要内容,如果未能解决你的问题,请参考以下文章
将 CSV 导入到 postgreSQL 中的表中,忽略重复项 - 亚马逊 AWS/RDS
使用 NodeJs 将数据从 CSV 导入 Oracle 中的表