2011-10-02 24 views
2

我正在使用AR和Rails 3.0.9和SQLite 3.6.22(Ubuntu Lucid Lynx)。我已將FTS3虛擬表添加到以前未使用FTS的數據庫中。我不知道如何使用AR調用(例如create_table)來創建我想要的虛擬表。所以我使用原始SQL創建並填充表格。我開始使用遷移。起初效果很好,但結果是schema.rb不完整。不知何故AR不能將FTS錶轉儲到模式中。我一直無法解決這個問題。如何使用ActiveRecord在SQLite3中設置FTS虛擬表?

這意味着,例如,當我運行我的RSpec測試套件時,FTS表不在數據庫中。我已經通過添加一個輔助方法來填充FTS表(它只需要幾秒鐘),並將其添加到之前的相關RSpec示例塊中。我還必須有一個單獨的數據庫種子任務來構建種子後面的FTS表。

目前的安排實際上工作正常,因爲它花費很少的時間在飛行中建立虛擬表。但我確信我應該能夠直接使用AR調用來構建FTS表,我想可以避免其他問題(表不會轉儲到schema.rb)。是否有任何文檔通過AR設置與SQLite的FTS?我一直無法找到任何。謝謝。

+0

你是如何處理'schema.rb'?它不斷嘗試以半破的狀態更新自己。 –

回答

1

您需要使用config.active_record.schema_format鍵將模式格式設置爲config/application.rb中的SQL。 AR沒有辦法將數據庫特定的東西轉儲到schema.rb中(短缺Connection#execute

瘋狂的令人敬畏的替代方法是修補遷移以將這些執行語句存儲在某處並將它們放在schema.rb中作爲撥打execute

1

我終於在實際看到這些迴應之前就解決了這個問題,並忘記了這個項目。但是我最近開始做了一些更多的開發,這又是一個障礙,所以我嘗試應用上面的建議,將config.active_record.schema_format設置爲:sql而不是:ruby。不幸的是,生活就是從來沒有那麼容易:

schema.sql not creating even after setting schema_format = :sql

顯然,這只是從來沒有使用Rails 3.工作,所以我已經開始轉換項目到Rails 4.我仍然有ActiveRecord的agita公平的位排序通過,但看起來:sql設置適用於AR 4.0中的schema_format。