2012-12-10 29 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方法。