2011-02-09 46 views
2

Tricky。我的Rails型號包括線路喜歡:無法運行rake db:schema:load除非數據庫已經被加載

scope :unread, where(arel_table[:read].eq(false)) 

這條線不能運行,但是,除非arel_table[:read]定義,除非該列中存在是不確定的。 (此行可以改寫不使用阿雷爾,但有些領域卻不能。)

然而,當我嘗試運行rake db:schema:load,我得到一個NoMethodError的事實,arel_table[:read]是不確定造成。總之,這是一個Catch-22。我無法在不運行環境的情況下加載數據庫模式,除非數據庫已經加載,否則我無法加載環境。

有沒有更好的答案比「註釋掉所有這些行然後取消註釋時完成」?有很多違規行。

回答

1

這就是在範圍上使用arel的問題。它可能會影響遷移。簡單的解決方案就是去原始的SQL。

scope :unread, where('read = false') 

較長的答案是,運行遷移時(通常不加載),該類以某種方式加載。如果您可以在遷移期間找到導致該類加載的原因並解決該問題,則仍然可以在範圍內使用arel_table。但可能不值得。

相關問題