0
導入時轉換到這個模型方法時,下列rake任務運行完全從CSV
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框架的行爲是不同的。什麼是處理模型方法的正確方法?
我不認爲你可以用這種方法在類方法中使用實例變量...嘗試通過刪除'@'來轉換你的變量名稱。這會有幫助嗎? – 2015-03-31 09:11:09
在這兩種情況下,實例變量都是不必要的。局部變量應該這樣做。 – 2015-03-31 09:15:45
我試過轉換沒有'@'並且導致相同的結果 – Jerome 2015-03-31 09:16:35