2015-08-25 42 views
1

我目前正在Ruby中構建一個簡單的銀行程序。我已經設置了MVC風格。我收到以下錯誤消息。SQlite錯誤:「沒有這樣的表」

/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的寶石文件的最新版本。

  • 恢復到以前的提交從我的GitHub工作,並試圖運行該程序。

  • 僅恢復有問題的局部變量方法回到它以前的功能名稱。

  • 使用Google搜索我的內容。

看到我的GitHub程序代碼用於:​​

+2

您應該發佈正在進行數據庫調用的部分Ruby代碼,而不是強制每個人都通過GitHub進行挖掘。 –

+0

當您從命令行運行'sqlite3 bank.db'並執行'.tables'時,'managers'會顯示出來嗎? – Amadan

+0

Amadan,這是我得到它我運行該命令: 'devil @ DEVil:〜/ repos/ruby​​_bank $ sqlite3 bank.db SQLite版本3.8.2 2013-12-06 14:53:30 輸入「 .help「的指令 輸入以」;「結尾的SQL語句 sqlite> .tables; 錯誤:未知命令或無效參數:「表格」。輸入「.help」尋求幫助 sqlite> ' –

回答

1

它看起來像問題在this創建承諾,對model.rb 19線。你嘗試檢查,如果由它選擇存在表:

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的辦法可能是你實際上是在尋找解決方案。

+0

非常感謝!對此,我真的非常感激。 –