2011-10-02 69 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。