2012-09-17 12 views
21

मुझे पता है कि इस मंच पर इस सवाल से बहुत कुछ पूछा गया है लेकिन मैं सख्त समय सीमा के तहत हूं और मुझे कुछ मदद की ज़रूरत है, इसलिए किसी भी सलाह की बहुत सराहना की जाती है। मैं रेल पर रूबी के लिए नया हूं इसलिए जवाब देने पर कृपया इसे ध्यान में रखें। मैं एक रेक कार्य बनाना चाहता हूं, जब चलाता है, mysqlite डीबी में एकाधिक तालिकाओं को अद्यतन करता है। यह एक माइग्रेशन फ़ाइल है जो मेरे डीबी में एक नई घटना बनाता है। मैं एक रेक कार्य कैसे बना सकता हूं जो इस जानकारी को CSV फ़ाइल के माध्यम से इनपुट करेगा। क्या कोई मुझे रैक फ़ाइल को शुरू से ही खत्म करने में कुछ मदद दे सकता है। जाहिर है आपको हर स्ट्रिंग के लिए हर काम लिखने की जरूरत नहीं है, बस मुझे कुछ उदाहरण दें। और वास्तविक रेक फ़ाइल के अलावा, क्या मुझे अपने ऐप के किसी भी अन्य हिस्से में कोड जोड़ने की ज़रूरत है (मुझे पता है कि यह एक बहुत ही सामान्य सवाल है, लेकिन अगर मुझे कोड जोड़ने की ज़रूरत है, तो मैं कहां से सामान्य विवरण की सराहना करता हूं)। मुझे लगता है कि थोड़ा सा मार्गदर्शन साथ चल जाएगा। अगर किसी से मुझसे कोई और जानकारी चाहिए तो कृपया पूछें।मैं रेक कार्य के माध्यम से एक CSV फ़ाइल कैसे आयात कर सकता हूं?

class CreateIncidents < ActiveRecord::Migration 
    def self.up 
    create_table :incidents do |t| 
     t.datetime :incident_datetime 
     t.string :location 
     t.string :report_nr 
     t.string :responsible_party 
     t.string :area_resident 
     t.string :street 
     t.string :city 
     t.string :state 
     t.string :home_phone 
     t.string :cell_phone 
     t.string :insurance_carrier_name 
     t.string :insurance_carrier_street 
     t.string :insurance_carrier_city 
     t.string :insurance_carrier_state 
     t.string :insurance_carrier_phone 
     t.string :insurance_carrier_contact 
     t.string :policy_nr 
     t.string :vin_nr 
     t.string :license_nr 
     t.string :vehicle_make 
     t.string :vehicle_model 
     t.string :vehicle_year 


     t.timestamps 
    end 
    end 

    def self.down 
    drop_table :incidents 
    end 
end 
+0

यह सहायक .... है > http://stackoverflow.com/questions/3346108/how-to-write-rake-task-to-import- डेटा-टू-रेल-ऐप –

उत्तर

20
lib/कार्य में अपनी परियोजना फ़ोल्डर के अंतर्गत

एक रेक फ़ाइल बनाने कहते हैं कि "import_incidents_csv.rake"

इस Ruby on Rails - Import Data from a CSV file

रेक फ़ाइल में

पालन कोड

require 'csv' 
namespace :import_incidents_csv do 
    task :create_incidents => :environment do 
    "code from the link" 
    end 
end 

निम्नलिखित है आप इस कार्य को "रेक आयात_incidents_csv: create_incidents" के रूप में कॉल कर सकते हैं

+0

मेरी समस्या यह है कि मुझे रेक फ़ाइल में डालने के लिए कोड नहीं पता है जो बिना किसी त्रुटि के नई घटना को ठीक से बनाता है। लेकिन प्रतिक्रिया के लिए धन्यवाद। – RubyDude1012

+0

आपको घटना तालिका के कॉलम नाम के रूप में पहली पंक्ति के साथ एक सीएसवी फ़ाइल बनाने की आवश्यकता होगी। – Rubyman

+0

यह वह कोड है जिसे मैंने StackOverflow पर पाया है जिसे मैंने अपने ऐप को अनुकूलित करने का प्रयास किया है। import_csv 'सीएसवी' csv_text = File.read ('ग की आवश्यकता होती है:/रेल/अंगूठे/मैं मुसीबत हो रही है यह, हालांकि पढ़ने के लिए स्वरूपित ... खेद desc "एक पंक्ति कार्य विवरण" काम आ रही है incidents.csv ') csv = CSV.parse (csv_text,: headers => true) csv.each do | row | पंक्ति = row.to_hash.with_indifferent_access Incidents.create! (Row.to_hash.symbolize_keys) अंत अंत – RubyDude1012

2

यहां एक उदाहरण सीएसवी है जिसे मैंने रेक डीबी: बीज का उपयोग करके आयात किया है। मैंने इसे बीज.आरबी फ़ाइल में लिखा और सीएसवी फ़ाइल को /public/seed_data/zip_code.csv में डाल दिया। यह सुंदर आत्म व्याख्यात्मक है (यानी, सीएसवी में तीन कॉलम हैं: कोड, लंबा और अक्षांश

कोड प्रत्येक पंक्ति को पार करता है, प्रासंगिक डेटा निकालता है और इसे स्थानीय चर में निर्दिष्ट करता है और फिर इसे रिकॉर्ड में लिखता है। मदद करता है

File.open("#{Rails.root}/public/seed_data/zip_code.csv") do |zip_codes| 
    zip_codes.read.each_line do |zip_code| 
    code, longitude, latitude = zip_code.chomp.split(",") 
    # to remove the quotes from the csv text: 
    code.gsub!(/\A"|"\Z/, '') 
    # to create each record in the database 
    ZipCodeGeo.create!(:zip_code => code, :longitude => longitude, :latitude =>  latitude)    
    end 
end 
11

मैं घंटे और घंटे एक दिन मैं अंत में यह मिल गया के लिए इस पर काम किया निम्न कार्य करके काम करने के लिए:।। मेरी csv फ़ाइल है कि परिलक्षित करने के लिए

  1. जोड़ा गया एक पहली पंक्ति में शीर्ष लेख मेरे मॉडल में attr_accessible। मेरे मामले में मेरा मॉडल attr_accessibleथा, :name और मेरी सीएसवी फ़ाइल में पहली पंक्ति पढ़ने का नाम, परिचय।
  2. एक कस्टम रेक फ़ाइल बनाई गई। मैंने मेरा आयात नाम दिया और इसे lib/कार्यों फ़ोल्डर में रखा। उस फ़ाइल में इस कोड को जगह:
#lib/tasks/import.rake 
require 'csv' 
desc "Imports a CSV file into an ActiveRecord table" 
task :import, [:filename] => :environment do  
    CSV.foreach('myfile.csv', :headers => true) do |row| 
     MyModel.create!(row.to_hash) 
    end 
end 

फिर कमांड लाइन में bundle exec rake import टाइप करें।

इसे काम करने के लिए मेरे पास काफी SQLite डेटाबेस ब्राउज़र था। मुझे उम्मीद है कि किसी की मदद करता है!

0

आप रेलवे के CSV मॉड्यूल का उपयोग करके अपनी सीएसवी फ़ाइल पढ़ सकते हैं और रिकॉर्ड बना सकते हैं। यहां विस्तृत सहायता दी गई है: Populate db using csv

0

मैंने इसे पहले इस्तेमाल किया है। यह किसी भी प्रकार का मॉडल लेता है।

रेक csv_model_import [bunnies।सीएसवी, बनी]

एक आकर्षण की तरह काम करता है।

desc "Imports a CSV file into an ActiveRecord table" 
 
task :csv_model_import, :filename, :model, :needs => :environment do |task,args| 
 
    lines = File.new(args[:filename]).readlines 
 
    header = lines.shift.strip 
 
    keys = header.split(',') 
 
    lines.each do |line| 
 
    params = {} 
 
    values = line.strip.split(',') 
 
    keys.each_with_index do |key,i| 
 
     params[key] = values[i] 
 
    end 
 
    Module.const_get(args[:model]).create(params) 
 
    end 
 
end

+0

कम नमूना, कॉमा के कारण –

संबंधित मुद्दे