我目前正在使用Ruby构建一个简单的银行程序。我已经设置了MVC风格。我收到以下错误消息。
/home/devil/.rvm/gems/ruby-2.2.1/gems/sqlite3-1.3.10/lib/sqlite3/database.rb:91:in `initialize': no such table: managers (SQLite3::SQLException)
from /home/devil/.rvm/gems/ruby-2.2.1/gems/sqlite3-1.3.10/lib/sqlite3/database.rb:91:in `new'
from /home/devil/.rvm/gems/ruby-2.2.1/gems/sqlite3-1.3.10/lib/sqlite3/database.rb:91:in `prepare'
from /home/devil/.rvm/gems/ruby-2.2.1/gems/sqlite3-1.3.10/lib/sqlite3/database.rb:134:in `execute'
from /home/devil/Desktop/RubyBank-manager_model/model.rb:19:in `initialize_database'
from /home/devil/Desktop/RubyBank-manager_model/model.rb:7:in `initialize'
from controller.rb:8:in `new'
from controller.rb:8:in `initialize'
from controller.rb:124:in `new'
from controller.rb:124:in `<main>'
当天早些时候该计划工作正常。我在控制器方法中更改了局部变量的名称,它开始向我提出上述错误。
我尝试过的事情都失败了:
将我的SQlite gem文件更新为最新版本。
从我的GitHub恢复之前提交的有效并尝试运行该程序的提交。
仅将有问题的局部变量方法恢复为以前的功能名称。
在Google上搜索我的内容。
为程序代码查看我的GITHUB:https://github.com/erikasland/RubyBank/tree/add_manager
答案 0 :(得分:1)
看起来问题是在model.rb
的第19行的this提交中创建的。您正试图通过从中选择来检查表是否存在:
managers_exist = db.execute("SELECT * FROM managers").length > 0
这可以通过查询架构而不是表来解决 - 您已使用accounts
表成功完成此操作:
accounts_table_exists = db.execute("SELECT 1 FROM sqlite_master WHERE
type='table' AND name= ?", "accounts").length > 0
请注意,您选择的是sqlite_master
,而不是accounts
。你想要的是这样的:
managers_exist= db.execute("SELECT 1 FROM sqlite_master WHERE
type='table' AND name= ?", "managers").length > 0
但是,在我看来,CREATE TABLE IF NOT EXISTS
方法可能是您实际需要的解决方案。