いくつかの値を .each do コード ブロックの配列にできるだけ簡単な方法で読み取ろうとしていますが、問題が発生しています。作成したrakeファイルを介してcsvファイルをインポートしています。これにより、テーブルが新しい行で更新され、新しいIDが作成されます。作成された各IDを取得して配列に保存しようとしています。そして、別の rake タスクでその配列に格納されている値にアクセスできるようにしたいと考えています。
次のコードは、csv ファイルをインポートする rake ファイルと、新しく生成された ID を配列にキャプチャするためのものです。現在、本来の機能を果たしていますが、一度に 1 つの新しい行しかインポートできません。
Import_incidents_csv.rake
require 'csv'
namespace :import_incidents_csv do
task :create_incidents => :environment do
puts "Import Incidents"
csv_text = File.read('c:/rails/thumb/costrecovery_csv/lib/csv_import/incidents.csv')
csv = CSV.parse(csv_text, :headers => true)
csv.each do |row|
row = row.to_hash.with_indifferent_access
Incident.create!(row.to_hash.symbolize_keys)
end
@last_incident_id = Incident.last.id
end
end
これは、割り当てられた配列に値を格納する必要がある別の csv ファイルをインポートする別の rake ファイルです。繰り返しますが、現在、1 つの新しい行をインポートするだけで問題なく動作しますが、複数の行をインポートすると、すべてが少し面倒になります。
Import_timesheets_csv.rake
require 'csv'
namespace :import_timesheets_csv do
task :create_timesheets => :environment do
puts "Import Timesheets"
csv_text = File.read('c:/rails/thumb/costrecovery_csv/lib/csv_import/timesheets.csv')
csv = CSV.parse(csv_text, :headers => true)
csv.each do |row|
row = row.to_hash.with_indifferent_access
Timesheet.create!(row.to_hash.symbolize_keys)
end
timesheet = Timesheet.last
timesheet.incident_id = @last_incident_id
timesheet.save
@last_timesheet_id = Timesheet.last.id
end
end
配列を扱うためのこのリソースhttp://www.tutorialspoint.com/ruby/ruby_arrays.htmを読みましたが、非常に混乱しているようです。値を配列に読み込むと、Import_incidents_csv.rake ファイルがどのように見えるかについての私の最善の推測を次に示します。最後にプットがあるので、整数が配列に適切に格納されていることを確認できます。すべてが機能するようになったら、削除します。
require 'csv'
def inc_id
@inc_id = Incident.last.id
end
namespace :import_incidents_csv do
task :create_incidents => :environment do
puts "Import Incidents"
csv_text = File.read('c:/rails/thumb/costrecovery_csv/lib/csv_import/incidents.csv')
csv = CSV.parse(csv_text, :headers => true)
csv.each do |row|
row = row.to_hash.with_indifferent_access
Incident.create!(row.to_hash.symbolize_keys)
Incident.last.id = @inc_id
id_array = Array.new(@inc_id)
end
puts "#{id_array}"
end
end