从rails导入csv文件到oracle数据库

时间:2017-06-30 17:59:59

标签: ruby-on-rails oracle csv

我正在开发一个简单的webapp,我通过“activerecord-oracle_enhanced-adapter'”连接了Oracle数据库。和oci8。

我有一个网页,我想选择一个csv文件并将这些数据发送到oracle。

实际上我可以从我的oracle数据库中正确检索条目而没有任何问题,当我通过webapp创建订单时,我可以将帖子插入到我的oracle数据库中。

这是我在models / commande.rb中的代码:

class Commande < ApplicationRecord
   require 'csv'

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

controller / commandes_controller:

def import
   Commande.import(params[:file])
   redirect_to root_url, notice: "Activity Data Imported!"
end

视图/ commandes / index.html.erb

<h4>Import pool orders</h4>
  <%= form_tag import_commandes_path, multipart: true do %>
  <%= file_field_tag :file %>
  <%= submit_tag "Import CSV" %>
<% end %>

路由器:

Rails.application.routes.draw do
  resources :commandes do
    collection {post :import}
  end
  resources :ressources

  root to: "commandes#index"
   # For details on the DSL available within this file, see 
 http://guides.rubyonrails.org/routing.html
end

当我选择我的csv文件并单击导入时,我收到一条错误消息: ActiveModel :: UnknownAttributeError blabala表的字段。

我成功了一次(我实际上并不知道)并接到我的通知:&#34;已导入的活动数据&#34;但是任何数据都被转发到我的oracle数据库。

有人有想法吗?

2 个答案:

答案 0 :(得分:0)

我正在分享照片。很容易看到所有的信息。 正如您将看到的,我尝试了另一个表&#34;用户&#34;。我通过rails创建了表,并使用db:migrate to oracle获取。与下面描述的相同的错误:

screenshot error

答案 1 :(得分:0)

CSV.foreach(file.path, headers: true) do |row|
  Commande.create! row.to_hash
end

你的代码应该正常工作。不知何故,它输出的行不正确。 你有哪个版本的Ruby?

正如你从图中可以看到的那样,它正在提供像哈希一样的哈希 { "user_id;name" => "3;Laure" } 应该在哪里 { 'user_id': "3", 'name': "Laure" }

它引发了错误,因为您的模型没有列"user_id;name",它有两列,一列user_id另一列name

因此,您打开的CSV格式错误或者您的ruby版本已过时。

您可以通过将csv列直接映射到模型上的字段来完成此工作,例如

CSV.foreach(file.path, headers: false) do |row|
  split_row = row.split(';')
  Commande.create!(user_id: split_row[0], name: split_row[1])
end