如何使用ActiveRecord在SQLite3中设置FTS虚拟表?

时间:2011-10-02 23:28:59

标签: ruby-on-rails sqlite full-text-search

我正在使用AR与Rails 3.0.9和SQLite 3.6.22(Ubuntu Lucid Lynx)。我已经将一个FTS3虚拟表添加到以前没有使用过FTS的数据库中。我不知道如何使用AR调用(例如create_table)来创建我想要的虚拟表。所以我使用原始SQL创建并填充表。我开始使用迁移。起初效果很好,但结果是schema.rb不完整。不知何故,AR无法将FTS表转储到架构中。我无法解决这个问题。

这意味着,例如,当我运行我的RSpec测试套件时,FTS表不在数据库中。我通过添加一个辅助方法来填充FTS表(只需要几秒钟)并在相关RSpec示例的块之前添加它来解决这个问题。我还必须有一个单独的DB种子任务来在种子之后构建FTS表。

当前的安排实际上可以正常工作,因为它需要很少的时间来动态构建虚拟表。但我确信我应该能够直接使用AR调用构建FTS表,我想这将避免另一个问题(表没有转储到schema.rb)。是否有通过AR设置FTS与SQLite的文档?我找不到任何东西。感谢。

2 个答案:

答案 0 :(得分:2)

您需要使用config/application.rb密钥在config.active_record.schema_format中将架构格式设置为SQL。 AR实际上没有办法将类似数据库的东西转储到schema.rb中(缺少Connection#execute

疯狂的替代方案是修补迁移以在某处存储这些执行语句,并将它们作为execute调用放在schema.rb中。

答案 1 :(得分: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中的schema_format 4.0。