У меня есть следующий метод. Мой код цепляется за if statement
в моем блоке .each
с ошибкой: nil can't be coerced into Float (TypeError)
.
Я пробовал много вариантов, все загвоздки в блоке .each
.
Код должен вычислять среднее значение всех элементов, сгруппированных по Type
, , исключая текущее наблюдение . Например, 10 пунктов с 10 различными значениями под Type foo
. Элемент 1 имеет ячейку, вычисляющую среднее из 9 элементов - , исключая сам . Пожалуйста, порекомендуйте. Я в конце остроумия.
Код ниже - это метод, существующий в моей IDE. Ruby 2.3.7
specific_row[0]
должно относиться к Id
и
specific_row[1]
должно относиться к Amount
.
Примечание: Я решил использовать .execute
сверх .execute2
в попытке не отключить данные заголовка.
def billavgx(info_hash)
begin
db = SQLite3::Database.open('billinfo.db')
db.results_as_hash = true
db.transaction
specific_amt = db.prepare "SELECT Amount AND Id FROM bills WHERE Type = :Type"
specific_amt.execute info_hash[:category]
specific_amt.each do |specific_row|
if @total_rows == 1
@avgx = (@total_amt - specific_row[1]) / @total_rows
elsif @total_rows > 1
@avgx = (@total_amt - specific_row[1]) / (@total_rows - 1)
else
return "insufficient entries"
end
db.execute2 "UPDATE bills SET AvgX = :AvgX WHERE Id = :Id AND Type = :Type", @avgx, specific_row[0], info_hash[:category]
end
puts db.changes.to_s + " changes made"
db.commit
rescue SQLite3::Exception => e
puts "error here " , e
ensure
specific_amt.close if specific_amt
db.close if db
end
end