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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。