2017-03-10 6 views
0

データベースをインポートしようとしているXMLデータがあります。 nokogiri gemを使用しようとしています。私はxml_data.rbというファイルを書いています。私は、コマンドライン上で>ruby xml_data.rbを実行すると、私は次のエラーを受け取る:RailsでXMLデータをインポートする方法5

xml_data.rb:8:in block in <main>': uninitialized constant Job (NameError) from C:/RailsInstaller/Ruby2.3.0/lib/ruby/gems/2.3.0/gems/nokogiri-1.7.0.1-x86-mingw32/lib/nokogiri/xml/node_set.rb:187:in block in each' from C:/RailsInstaller/Ruby2.3.0/lib/ruby/gems/2.3.0/gems/nokogiri-1.7.0.1-x86-mingw32/lib/nokogiri/xml/node_set.rb:186:in upto' from C:/RailsInstaller/Ruby2.3.0/lib/ruby/gems/2.3.0/gems/nokogiri-1.7.0.1-x86-mingw32/lib/nokogiri/xml/node_set.rb:186:in each' from xml_data.rb:7:in `'

私はこれを適切に行う方法を理解していません。

require 'nokogiri' 

OLD_DATA = 'data/old_data.xml' 

doc = File.open(OLD_DATA) {|f| Nokogiri::XML(f)} 

doc.css('request').each do |node| 
    Job.create(
     :last_name => node['name'], 
     :telephone => node['phone'], 
     :street_address => node['address'], 
     :city => node['city'], 
     :state => node['state'], 
     :zip => node['zip'], 
     :email => node['email'], 
     :au_chog => node['chogAu'], 
     :person_type => node['affil'], 
     :research_use => node['use'], 
     :subject => node['subject'], 
     :notes => node['note'], 
     :start_date => node['startDate'], 
     :end_date => node['addDate'], 
     :complete => true, 
     :time_spend => node['hours'] 
    ) 
end 

ルビー:v2.3.3 のRails:バージョン5.0.1

UPDATE

私はrakeタスクになるこのコードを書き直し、以下のxml_data.rbファイルです。しかし、私はこれをしていない。私がこのタスクを実行すると、正しいXML構文といくつかの構文エラーが発生します。以下は更新されたコードです:

require 'nokogiri' 

namespace :db do 
    namespace :seed do 

    desc 'Add old data to database' 
    task :import_data => :environment do 


     OLD_DATA = "#{Rails.root}/lib/assets/data/old_data.xml" 

     doc = Nokogiri::XML(File.open(OLD_DATA)) do |config| 
      config.options = Nokogiri::XML::ParseOptions::STRICT 
     end 

     doc.css("request").each do |node| 
      Job.create(
       :last_name => node['name'], 
       :telephone => node['phone'], 
       :street_address => node['address'], 
       :city => node['city'], 
       :state => node['state'], 
       :zip => node['zip'], 
       :email => node['email'], 
       :au_chog => node["chogAu"], 
       :person_type => node['affil'], 
       :research_use => node['use'], 
       :subject => node['subject'], 
       :notes => node['note'], 
       :start_date => node['startDate'], 
       :end_date => node['addDate'], 
       :complete => true, 
       :time_spend => node['hours'] 
      ) 
     end 
    end 
    end 
end 

答えて

0

レーキタスクとして書き換えます。

require 'nokogiri' 

namespace :db do 
    namespace :seed do 

     desc 'Add old data to database' 
     task :import_data => :environment do 

      OLD_DATA = "#{Rails.root}/lib/assets/data/old_data.xml" 

      doc = Nokogiri::XML(File.open(OLD_DATA)) do |config| 
       config.options = Nokogiri::XML::ParseOptions::STRICT 
      end 

      doc.css("request").each do |node| 
       Job.create(
        :last_name => node['name'], 
        :telephone => node['phone'], 
        :street_address => node['address'], 
        :city => node['city'], 
        :state => node['state'], 
        :zip => node['zip'], 
        :email => node['email'], 
        :au_chog => node["chogAu"], 
        :person_type => node['affil'], 
        :research_use => node['use'], 
        :subject => node['subject'], 
        :notes => node['note'], 
        :start_date => node['startDate'], 
        :end_date => node['addDate'], 
        :complete => true, 
        :time_spend => node['hours'] 
       ) 
      end 
     end 
    end 
end 
+0

まだ構文エラーがありますか?これは実行する必要があるように見えます... – Glyoko

+0

私はそうではありません。私は問題を引き起こしていたラインを持っていた。私がそれを発見したとき、私はその投稿を更新しました。 – pshowell

0

実際にはRails環境内で実行されていないので、ジョブは定義されていません。

あなたはこのような何かを試すことができ、レールのあなたの外の場合は

require File.expand_path(File.dirname(__FILE__) + 'config/environment') 
+0

これは私が今受け取っているエラーです 'C:/RailsInstaller/Ruby2.3.​​0/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:' require 'に:このファイルを読み込めません - C:/ Site/arch_record_keeper/config/environments(LoadError) from C:/RailsInstaller/Ruby2.3.​​0/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in require ' from xml_data。 rb:1:in '

' ' – pshowell

+0

このファイルはどこにありますか?レールのホームディレクトリにありますか? – Sladey

+0

そうではありません。これはアプリのapp/assetsディレクトリにあります。 – pshowell

0

を追加します。

require 'nokogiri' 
require 'active_record' 

ActiveRecord::Base.establish_connection(
    adapter: 'mysql2', # or 'postgresql' or 'sqlite3' or 'oracle_enhanced' 
    host:  'localhost', 
    database: 'your_database', 
    username: 'your_username', 
    password: 'your_password' 
) 

class Job < ActiveRecord::Base 
end 

class ExampleData 
    attr_reader :file 

    def initialize(file) 
    @file = file 
    end 

    def xml 
    Nokogiri::XML(open(file)) 
    end 

    def create_jobs 
    xml.css('request').each do |node| 
     Job.create(
     :last_name => node['name'], 
     :telephone => node['phone'], 
     :street_address => node['address'], 
     :city => node['city'], 
     :state => node['state'], 
     :zip => node['zip'], 
     :email => node['email'], 
     :au_chog => node['chogAu'], 
     :person_type => node['affil'], 
     :research_use => node['use'], 
     :subject => node['subject'], 
     :notes => node['note'], 
     :start_date => node['startDate'], 
     :end_date => node['addDate'], 
     :complete => true, 
     :time_spend => node['hours'] 
    ) 
    end 
    end 


    file = File.dirname(__FILE__) + "/data/old_data.xml" 
    example_data = ExampleData.new(file) 
    example_data.create_jobs 
end 
関連する問題