2017-06-30 20 views
0

私は単純なWebアプリケーションを作成しており、Oracleデータベースは、「activerecord-oracle_enhanced-adapter」およびoci8を介して接続しています。csvファイルをレールからOracleデータベースにインポート

私はcsvファイルを選択し、Oracleにこれらのデータを送信したいWebページを持っています。

実は私は問題なく私のOracleデータベースから適切にエントリを取得することができますし、私は私のWebアプリケーション経由で注文を作成するとき、私はどちらか私のOracleデータベースにポストを挿入することができます。ここで

モデル/ commande.rbで私のコードです:/ commandes_controller

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 

コントローラ:

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 %> 

ルータ:

ActiveModel :: UnknownAttributeError blabalaテーブルのフィールド:私は私のcsvファイルを選択し、[インポート]をクリックしたとき10

、私はエラーメッセージを持っています。

私は1時間に成功(と私はどのように実際には知らない)と私の通知を受けた:「活動データをインポート」が、どのデータが私のOracleデータベースに転送されました。

誰かがアイデアを持っていますか?

+0

のように、モデルのフィールドに直接マッピングしてCSVの列を、この作品を作ることができる、あなたはエラーを投稿しCommandesフィールドに正しく一致する「row.to_hash」が出力されことができますか? –

+0

すべてのフィールドは私のデータベースにあります – JohnCooper

答えて

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

はまあ、あなたのコードが動作する必要があります。何とか行を間違って出力しています。 あなたにはどのバージョンのRubyがありますか?あなたは何が起こっているかを写真から見ることができるように

は、それはそれはそれは、あなたのモデルが列"user_id;name"を持っていないので、それがエラーを上げています { 'user_id': "3", 'name': "Laure" }

あるべき場所、 { "user_id;name" => "3;Laure" } のようなハッシュを提供するということですuser_idもう1つname

開いている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 
+0

私は更新されたルビーのバージョン:ruby 2.4.0p0を持っています。しかし、おかげさまで、私は2日間かけて働かせて過ごしました。私はちょうどcsvファイルのヘッダーを削除し、あなたが提供するスニペットを使用しなければなりませんでした。しかし、私はまだ、私は以前に会ったエラー、エラーを取得します。 csv(データはOracleに転送されています)をインポートするときに機能しますが、Oracle内では(null)のエントリがなくなり、ユーザーのダッシュボードを表示する場合はテキストが印刷されません。アイデアはありますか?私のモデルにatr_accessorを配置するときにこのエラーが発生しました。 – JohnCooper

+0

SQLリクエストが正しく機能していないことがわかります。SQL(0.4ms)INSERT INTO "USERS"( "CREATED_AT"、 "UPDATED_AT"、 "ID")VALUES(:a1、:a2、:a3) 'user_id'と 'name'はありません。 – JohnCooper

+0

私が提供したコードで少し変更することで、私の問題を解決しました。今それはかなり良い:) :)再度あなたに感謝 – JohnCooper

0

私は画像を共有しています。簡単にすべての情報を見ることができます。 ご覧のとおり、別のテーブル「users」を試しました。私はレールを介してテーブルを作成し、db:フェッチしてoracleに移行します。怒鳴る説明したのと同じエラー:あなたはそれを持っているよう

screenshot error

関連する問題