我一直在研究最近幾個月的項目,最初幾個月是在4.1.6中開發的,我是現在試圖將其更新到4.2.0(我已經逐步測試了4.1.6和4.2.0之間的所有版本,並且所有的4.1.x版本都沒有錯誤地工作,並且只有當我轉到4.2.0時,我纔會看到我在這裏描述的問題)。Ruby on Rails在將rails項目從4.1.9更新到4.2.0之後引發「錯誤的表名」錯誤
在這個應用程序中,所有模型都有很多共享的功能,所以我創建了一個抽象類,並且我所有的模型都從這個類繼承而來。
class TrackableModel < ActiveRecord::Base
self.abstract_class = true
...
end
class User < TrackableModel
...
end
在Gemfile中唯一的變化是改變gem 'rails', '4.1.6'
到gem 'rails', '4.2.0'
更新過程使用rake rails:update
按照指示HERE,隨後它與在同一文檔的第2節中的升級步驟。
我用這個rake任務的默認值覆蓋了所有衝突的文件,但是之後每次都檢查並在我的修改中工作。
更新前,通過了所有測試,但在更新
130 runs, 0 assertions, 0 failures, 130 errors, 0 skips
與錯誤
ActiveRecord::StatementInvalid: Mysql2::Error: Incorrect table name '': SHOW FULL FIELDS FROM ``
Error:
xxxTest#test_yyy:
NoMethodError: undefined method `each' for nil:NilClass
的應用似乎沒有任何改變用戶體驗的工作後。除非我嘗試執行測試,否則一切看起來都不錯。
我只是不能讓我的測試運行。
更新:
我忘了提,我運行
ruby 2.1.5p273 (2014-11-13 revision 48405) [i386-mingw32].
此外,我一直在努力遵循的執行路徑。它試圖設置燈具時似乎失敗了。它正在經歷一個建立表的schema_cache的循環。它查詢schema_migrations和我的第一個自定義表「customers」(在這個調用過程中,它遍歷這個表上的每一個看起來成功的列)。
在下次調用
ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter.columns(table_name#String)
table_name
的價值爲零
不幸的是,我仍然足夠新的紅寶石,我有發現其中TABLE_NAME值(schema_migrations,客戶的困難/導軌,零,...)實際上正在設置。
有人可以幫助指出表的列表來自那是建立schema_cache的方向?
謝謝那麼多!當我做出這個改變時,我的測試班又回到了一切。在一個相關的問題上,我試着將我的abstract_class中的belongs_to語句留在未評論的地方,只將它添加到需要它的模型中。在繼承這個的12個模型中,只有4個需要這個改變。其他8個似乎工作。但是如果我把它從這4箇中的任何一箇中排除出去,100%的測試都會失敗。離奇! – Tezyn
這很奇怪。我不確定它是一個錯誤還是什麼。 – curtp
我有一個類似的問題,並通過保持關聯聲明在抽象類中解決它,而不是在fixture文件中執行'something::fixture_name'我用'something_id替換它:<%= ActiveRecord :: FixtureSet.identify(: fixture_name)%>' – Shadwell