无法对浮点迭代求和

unable to sum a float iteration

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 方法,我需要忽略 headers,例如在我的 get_amt.each 块中。

我想 sum TypeAmount 列。但是我 运行 变成 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

db.execute2 "INSERT into a_table(Total) values(:get_amt)", get_amt[1][0]

本质上语句 get_amt = db.execute2 "SELECT sum(Amount) from a_table WHERE type = :type", hash_info[category] 将超过 1 个值写入 get_amt 变量。 必须为变量提供 INSERT 使用的 特定 值的 rowcolumn。因此 get_amt[1][0] 或第一行(headers 行之后的下一行)和第一列。