ruby -v 2.3.7
(sqlite3 имеет проблемы с совместимостью с более новым ruby -v) sqlite3 -v 3.22
sqlite -v 2.8
lsb_release -a 18.04
Я сжал код настолько, насколько смог.
def some_method(info_hash)
...
db.results_as_hash = true
sum = 0
db.transaction
db.execute2 "CREATE table if not exists a_table(Id INT PRIMARY KEY, Type TEXT, Month TEXT, Amount FLOAT, TOTAL FLOAT)"
db.execute2 "INSERT into a_table(Type, Month, Amount) values(:Type , :Month , :Amount)", info_hash[:category], info_hash[:month], info_hash[:amount]
get_amt = db.prepare "SELECT Amount from a_table WHERE Type = :Type"
get_amt.execute info_hash[:category]
get_amt.each do |g|
sum += g #here I get a NoMethodError for Nil:NilClass
end
db.execute2 "INSERT into bills(Total) values(:sum)", sum
db.commit
...
end
Я использую в основном метод execute2
.Я полагаюсь на метод execute
, где мне нужно игнорировать заголовки, например, в моем блоке get_amt.each
.
Я хочу sum
столбец Amount
для Type
.Но я сталкиваюсь с NoMethodError
, когда запускаю свой block
.
Полная ошибка: undefined method '+' for nil:NilClass (NoMethodError)
Пожалуйста, сообщите, где я ошибся.
РЕДАКТИРОВАТЬ: Я переписал код, чтобы отразить предложение @Shawn:
def some_method(info_hash)
...
db.transaction
db.execute2 "CREATE table if not exists a_table(Id INTEGER PRIMARY KEY, Type TEXT, Month TEXT, Amount FLOAT, Total FLOAT)"
db.execute2 "INSERT into a_table(Type, Month, Amount) values(:Type , :Month , :Amount)", info_hash[:category], info_hash[:month], info_hash[:amount]
get_amt = db.execute2 "SELECT sum(Amount) from a_table WHERE Type = :Type", info_hash[:category]
db.execute2 "INSERT into a_table(Total) values(:get_amt)", get_amt
db.commit
...
end
Это дает sqlite3 Exception
Index out of range