将用户 .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.rbhtml.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 文件中的数据导入表中的主要内容,如果未能解决你的问题,请参考以下文章

如何将excel中的数据导入hive仓库中

将 CSV 导入到 postgreSQL 中的表中,忽略重复项 - 亚马逊 AWS/RDS

将特定数据从 csv 文件导入 MS Access

使用 NodeJs 将数据从 CSV 导入 Oracle 中的表

VBA 程序仅将选定的 csv 文件(从一个文件夹)导入到访问中的单个表中

将.csv数据导入到mysql中