无法求和float迭代

时间:2019-04-07 23:37:37

标签: ruby sqlite each nomethoderror

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的{​​{1}}列中的Amount。但是运行Type时遇到NoMethodError

完整错误为: block

请告知我哪里出问题了。

编辑: 我重写了代码以反映@Shawn的建议:

undefined method '+' for nil:NilClass (NoMethodError)

这将产生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

1 个答案:

答案 0 :(得分:0)

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]将多个值写入get_amt变量中。 必须为变量提供row使用的 specific 值的columnINSERT。因此,get_amt[1][0]或第一行(标题行之后的下一行)和第一列。