我正在开发一个简单的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数据库。
有人有想法吗?
答案 0 :(得分:0)
我正在分享照片。很容易看到所有的信息。 正如您将看到的,我尝试了另一个表&#34;用户&#34;。我通过rails创建了表,并使用db:migrate to oracle获取。与下面描述的相同的错误:
答案 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