rails 从 CSV 导入时的实例变量
rails instance variables when importing from CSV
以下rake任务完美运行
task :load_scadenze_data => :environment do
require 'csv'
CSV.foreach("_private/scadenze.tsv", :col_sep => "\t", headers: true) do |row|
begin
@supplier = Supplier.find_by_code(row[2])
@scadenza = row[0].to_date
if (@scadenza <= Date.today)
@cweek_payment = 0
else
@cweek_payment = @scadenza.cweek
end
Scadenza.create(
:data_scadenza => row[0],
:supplier_id => @supplier.id
)
rescue StandardError => e
puts "Error importing row because '#{e.message}'"
puts row
end
end
end
然而,当将其转换为模型方法时,
def self.import(file)
CSV.foreach(file.path, headers: true) do |row|
begin
@supplier = Supplier.find_by_code(row[2])
@scadenza = row[0].to_date
if (@scadenza <= Date.today)
@cweek_payment = 0
else
@cweek_payment = @scadenza.cweek
end
Scadenza.create(
:data_scadenza => row[0],
:supplier_id => @supplier.id
)
end
end
记录未导入,因为
Error importing row because 'Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id'
因此 rails 框架以某种方式表现不同。处理模型方法的正确方法是什么?
在您的 "rake" 版本的脚本中,您正在解析 CSV:
CSV.foreach("_private/scadenze.tsv", :col_sep => "\t", headers: true)
但在您的 "model" 版本中,缺少 :col_sep
选项 - 可能它错误地解码了 CSV,并且它在 row[2]
中存储了无效值,因此无法找到正确的 Supplier
?
以下rake任务完美运行
task :load_scadenze_data => :environment do
require 'csv'
CSV.foreach("_private/scadenze.tsv", :col_sep => "\t", headers: true) do |row|
begin
@supplier = Supplier.find_by_code(row[2])
@scadenza = row[0].to_date
if (@scadenza <= Date.today)
@cweek_payment = 0
else
@cweek_payment = @scadenza.cweek
end
Scadenza.create(
:data_scadenza => row[0],
:supplier_id => @supplier.id
)
rescue StandardError => e
puts "Error importing row because '#{e.message}'"
puts row
end
end
end
然而,当将其转换为模型方法时,
def self.import(file)
CSV.foreach(file.path, headers: true) do |row|
begin
@supplier = Supplier.find_by_code(row[2])
@scadenza = row[0].to_date
if (@scadenza <= Date.today)
@cweek_payment = 0
else
@cweek_payment = @scadenza.cweek
end
Scadenza.create(
:data_scadenza => row[0],
:supplier_id => @supplier.id
)
end
end
记录未导入,因为
Error importing row because 'Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id'
因此 rails 框架以某种方式表现不同。处理模型方法的正确方法是什么?
在您的 "rake" 版本的脚本中,您正在解析 CSV:
CSV.foreach("_private/scadenze.tsv", :col_sep => "\t", headers: true)
但在您的 "model" 版本中,缺少 :col_sep
选项 - 可能它错误地解码了 CSV,并且它在 row[2]
中存储了无效值,因此无法找到正确的 Supplier
?