Rails 5-如何将数据从 xls 文件导入数据库

     2023-05-07     246

关键词:

【中文标题】Rails 5-如何将数据从 xls 文件导入数据库【英文标题】:Rails 5- How to import data from an xls file to the database 【发布时间】:2016-12-17 05:23:04 【问题描述】:

我正在尝试弄清楚如何将 xls 文件中的数据添加到我的 rails 5 psql 数据库中。

我曾尝试遵循 GoRails 教程 - 但这些教程很快变得无关紧要,因为它们使用在应用程序某处创建的 CSV 文件来完成教程。我不知道如何将我的 xls 数据转换为 csv 数据以跟随该教程。

我也尝试过这些教程。我不能让他们中的任何一个工作。

我尝试过this tutorial、this one 和this one。我无法让它们中的任何一个工作。

对我在博客上发布的第一个教程的问题的回复说要采取帖子中未列出的步骤。对我来说,我应该填补分步说明中的空白并不明显。

我在SO post 中概述了我的尝试。我无法找到帮助来让 xls 上传工作。因此,我再次提出帮助请求 - 鉴于第一个 SO 帖子变得很长,我为实施建议的解决方案进行了各种尝试。

我有:

class Randd::Field < ApplicationRecord

    require 'csv'


  # def self.import(file)
  #     CSV.foreach(file.path, headers: true) do | row |
  #         Randd::Field.create! row.to_hash
  #     end
  # end

  def self.create(file)
    CSV.foreach(file.path, headers: true) do |row|

      randd_field_hash = row.to_hash # exclude the price field
      randd_field = Randd::Field.where(id: randd_field_hash["id"])

      if randd_field.count == 1
        randd_field.first.update_attributes(randd_field_hash)
      else
        Randd::Field.create! row.to_hash#(randd_field_hash)
      end # end if !product.nil?
    end # end CSV.foreach
  end # end self.import(file)

第一预感:在这个模型中,我需要“csv”。鉴于我实际上没有要导入的逗号分隔值列表,我是否必须要求 'xls' 或其他内容?

Routes.rb

namespace :randd do
    resources :fields do
      collection do
        post :create
      end
    end
  end

控制器:

class Randd::FieldsController < ApplicationController

def index
    @randd_fields = Randd::Field.all
end

def new
    @field = Randd::Field.new
end

def create
    # @field = Randd::Field.new(randd_field_params)
    Randd::Field.create(params[:randd_field][:file])
    redirect_to action: "index", notice: "Data imported"
end

def show
    redirect_to action: "index"
end

索引视图:

  <table class="table table-bordered">
    <tr>
      <td> <h5>Title</h5> </td>
      <td> <h5>Reference (ANZ)</h5> </td>
      <td> <h5>Added</h5> </td>

     <%# if policy(@package_ips).update? %> 
        <td> <h5>Manage this asset</h5></td> 
     <%# end %>

    </tr>
      <% @randd_fields.each do | field | %>
        <td> <%= field.title %> </td>
        <td> <%= field.anz_reference %> </td>
        <td> <%= field.created_at.try(:strftime, '%e %B %Y') %> </td>
      <% end %>
    </tr>
  </table>

上面显示的注释组件显示了我尝试使用的所有各种选项来使其工作。

# def import
#   # byebug
#   # Randd::Field.import(params[:file])
#   # Randd::Field.create(params[:randd_field]['file'])
#   # redirect_to action: "index", notice: "Data imported"
# end

private
 def randd_field_params
  params.fetch(:randd_field, ).permit(:title, :anz_reference)
 end

end

我的表格有:

<%#= simple_form_for (@field), multipart: true do |f| %>
<%= simple_form_for @field,  multipart: true do |f| %>
  <%= f.error_notification %>

  <div class="form-inputs" style="margin-bottom: 50px">
    <div class="row">
      <div class="col-md-12">
        <div class="form_title">Research Field Codes</div>
      </div>
    </div>

    <div class="row">
      <div class="col-md-12">
        <%= f.file_field :file %>
      </div>
    </div>
  </div>

  <div class="row">
    <div class="col-md-10 col-md-offset-1" style="margin-top: 50px">
      <div class="form-actions">
        <%= f.button :submit %>
      </div>
    </div>
  </div>
<% end %>

此尝试产生的错误消息说:

NoMethodError - undefined method `[]' for nil:NilClass:
  app/controllers/randd/fields_controller.rb:13:in `create'

我的创建操作的第 13 行说:

Randd::Field.create(params[:randd_field][:file])

下一个预感:我的资源是嵌套的。 Randd 是顶层,field 是子级。

模型被调用:

class Randd::Field < ApplicationRecord

控制器被调用:

class Randd::FieldsController < ApplicationController

控制器中允许的参数定义为:

  params.fetch(:randd_field, ).permit(:title, :anz_reference)

表格使用以下开头行:

<%= simple_form_for @field,  multipart: true do |f| %>

错误消息中突出显示的行有:

Randd::Field.create(params[:randd_field][:file])

我想知道问题是否与在其中一些地方使用 randd_field 和表单中的 @field 有关?如果我尝试将其更改为 @randd_field 并且我不知道在哪里可以找到有关如何以任何完整、准确的形式使用命名空间的 ruby​​ 或 rails 规则,则该表单不起作用。

谁能帮忙看看这里出了什么问题?或者,是否有人参考了不依赖于我猜测缺少的步骤或如何将其转换为用于 xls 而不是 .csv 文件的完整教程?

【问题讨论】:

【参考方案1】:

您可以使用一些 ruby​​ xls 解析器。 Creek、Simple Spreadsheet 和 Roo。

【讨论】:

如何编写 Rake 任务以将数据导入 Rails 应用程序?

】如何编写Rake任务以将数据导入Rails应用程序?【英文标题】:HowtowriteRaketasktoimportdatatoRailsapp?【发布时间】:2011-03-2117:45:59【问题描述】:目标:使用CRON任务(或其他预定事件)更新数据库,每晚从现有系统导出数据。所有数... 查看详情

如何将上传的 CSV 或 XLS 文件中的数据自动导入 Google 表格

】如何将上传的CSV或XLS文件中的数据自动导入Google表格【英文标题】:HowtoautomaticallyimportdatafromuploadedCSVorXLSfileintoGoogleSheets【发布时间】:2015-01-0709:24:39【问题描述】:我的服务器上有一个旧数据库系统(无法通过网络访问),... 查看详情

Rails中如何将MaxMind本地数据、CSV文件导入redis?

】Rails中如何将MaxMind本地数据、CSV文件导入redis?【英文标题】:HowtoimportMaxMindlocaldata,CSVfilesintoredisinRails?【发布时间】:2017-12-2509:01:26【问题描述】:我需要将Maxmind提供的CSV文件导入到RubyonRails应用程序中的Redis。在这个link中... 查看详情

将 XLS 文件从 GCS 导入 BigQuery

...-08-0601:50:35【问题描述】:我的GoogleCloudStorage中有一些.xls数据,我想使用气流将其存储到GCP。我可以将其直接导出到BigQuery,还是可以使用其他库(例如pandas和xlrd)来转换文件并将其存储到BigQuery中?谢谢【问题讨论】:【参考... 查看详情

如何将xls文件导入MySQL表

】如何将xls文件导入MySQL表【英文标题】:HowtoimportxlsfileintoMySQLtable【发布时间】:2015-04-2915:53:02【问题描述】:我使用的是ubuntu14.04操作系统,我想将excelsheet(.xls)导入数据库。我正在使用phpmyadminmysql管理工具。如果有人能给我... 查看详情

如何将excel导入到数据窗口中

这个是直接导入的。还有一种方法,就是逐行逐列读取excel表格,这个方法效率不高,但是有个好处就是excel的数据文件和数据窗口不要求对应,就相当于excel是一个数据窗口,从这里取值,赋值到目标数据窗口一样的操作。如果... 查看详情

如何将导入 python 的数据从 csv 文件转换为时间序列?

】如何将导入python的数据从csv文件转换为时间序列?【英文标题】:HowcanIturndataimportedintopythonfromacsvfiletotime-series?【发布时间】:2018-10-0402:58:45【问题描述】:我想将通过.csv文件导入python的数据转换为时间序列。GDP=pd.read_csv(\'GDP... 查看详情

如何使用 Ruby on Rails 5 将数据从 URL 提取到表单中

】如何使用RubyonRails5将数据从URL提取到表单中【英文标题】:HowtopulldatafromURLintoformwithRubyonRails5【发布时间】:2017-11-1712:18:55【问题描述】:我有一个表格供用户填写以分享设计工作。但是字段与dribbble.com非常相似。我看到一些... 查看详情

Ruby on Rails - 从 CSV 文件导入数据

】RubyonRails-从CSV文件导入数据【英文标题】:RubyonRails-ImportDatafromaCSVfile【发布时间】:2011-05-2314:04:17【问题描述】:我想将CSV文件中的数据导入现有的数据库表。我不想保存CSV文件,只需从中获取数据并将其放入现有表中。我... 查看详情

如何使用 axios 将文件数据正确上传到 rails 5 后端

】如何使用axios将文件数据正确上传到rails5后端【英文标题】:Howtocorrectlyuploadfiledatausingaxiostorails5backend【发布时间】:2022-01-0511:09:03【问题描述】:我希望用户能够在我的项目上上传照片并将其添加到他们的个人资料中。我想... 查看详情

如何从 Scala Spark 中的 Excel (xls,xlsx) 文件构造数据框?

】如何从ScalaSpark中的Excel(xls,xlsx)文件构造数据框?【英文标题】:HowtoconstructDataframefromaExcel(xls,xlsx)fileinScalaSpark?【发布时间】:2017-05-2608:13:08【问题描述】:我有一个包含多个工作表的大型Excel(xlsxandxls)文件,我需要将其转换为... 查看详情

通过 Rails 将 SQL 文件或 Excel 文件中的数据导入数据库 [关闭]

】通过Rails将SQL文件或Excel文件中的数据导入数据库[关闭]【英文标题】:ImportDatafromSQLfileorExcelfileintodatabaseviaRails[closed]【发布时间】:2012-05-1118:08:23【问题描述】:我有来自Excel电子表格的数据,我想通过Rails导入数据库。我正... 查看详情

VBA 将 Excel 文件从 Access 保存为 .xls

...能重复。唯一可以做到这一点的方法是创建可以导入Excel数据的表,然后通过构建查询将其附加到目标表。问题是这个Excel文件必须是.xls格式,没有其他格式对我有用(不知道为什么)。我怎样才能从 查看详情

如何将 Postgres 数据库从一个 Elastic Beanstalk 环境复制到另一个环境?我正在使用 Rails 5

】如何将Postgres数据库从一个ElasticBeanstalk环境复制到另一个环境?我正在使用Rails5【英文标题】:HowdoIcopyaPostgresdatabasefromoneElasticBeanstalkenvironmenttoanother?I\'musingRails5【发布时间】:2018-01-2518:33:06【问题描述】:我有一对ElasticBeanst... 查看详情

如何将excel里的大量数据导入并转化成matlab中的矩阵

将Excel数据导入MATLAB中,需要先将数据录入到Excel中,然后再将其导入到MATLAB中参与矩阵运算。具体步骤如下:1.将需要导入的矩阵结构数据输入Excel,注意列与列与原矩阵的一一对应。2,输入保存数据后,使用以下步骤,我们有更好... 查看详情

如何使用数据库将数据从一个表导入另一个表:播种? (laravel 5.3)?

】如何使用数据库将数据从一个表导入另一个表:播种?(laravel5.3)?【英文标题】:HowtoimportdatafromonetabletoanothertableusingDatabase:Seeding?(laravel5.3)?【发布时间】:2017-05-1201:19:23【问题描述】:我的DatabaseSeeder是这样的:<?phpuseIll... 查看详情

如何将sqlserver备份文件导入现存数据库

SQLServer本身有数据导入的操作。但如果要从一个备份的文件中导入数据,则要进行另外的操作。下面以一个例子进行说明。  SQLServer服务器上已有一个DOE数据库,并且里面有大量的数据,现准备从另外一个备份文件A1.BAK(不是DO... 查看详情

如何将数据表导出到 xls,在导出前先询问密码

】如何将数据表导出到xls,在导出前先询问密码【英文标题】:Howtomakedatatablesexporttoxlsaskingforpasswordfirstbeforeexporting【发布时间】:2017-04-1305:41:17【问题描述】:我想知道是否可以让数据表在将数据从数据表导出到xls文件之前先... 查看详情