2012-12-10 27 views
2

的順序,我用Rails 3.2.8,並有Rails的生成development_structure.sql - 自卸

config.active_record.schema_format = :sql 
在我的config/application.rb中

在Oracle 11g數據庫中,我定義一個表,依賴於用戶定義的函數虛擬列:

CREATE TABLE BAR (
    ID NUMBER(19,0) NOT NULL, 
    STATUS NUMBER(19, 0) DEFAULT 1, 
    CALCULATED_STATUS NUMBER(19,0) GENERATED ALWAYS AS (MY_FUNCTION(STATUS)) VIRTUAL) 

當耙執行分貝:測試:clone_structure(任務:TOP =>默認=>規範=>分貝:測試:clone_structure),我打:

OCIError:ORA-00904: 「FOO」 「創建my_function」:無效的標識符:CREATE TABLE 「BAR」(...

我認爲正在發生的事情是db:structure:dump在開發中的函數之前導出表structure.sql,CREATE FUNCTION MY_FUNCTION出現在CREATE TABLE BAR語句之後。

我是否必須進入monkeypatch db:structure:dump如何工作?

謝謝。

+0

我發現Rails架構翻車機非常天真,很容易被任何不是表格的東西所迷惑。我不得不做大量的補丁來處理觸發器,視圖和全文索引,而不會完全爆炸。不過,我希望你能找到一個標準的解決方案。 – tadman

+0

你通常在哪裏製作補丁?我一直在尋找解決這個問題的方法,但我一直在發現自己達到了相同的結論。 – ayang

+0

第一步是創建一個可以完成這個工作的'config/initializer'文件。如果它有效並且你想正式化它,那麼把它轉換成一個完全成熟的寶石。 – tadman

回答

1

我最終在github.com/rsim/oracle-enhanced中查找了適用的源代碼,並在我嵌入到config/initializers中的文件中重寫了structure_dump和structure_dump_db_stored_code方法。