Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何使用ActiveRecord在SQLite3中设置FTS虚拟表?_Ruby On Rails_Sqlite_Full Text Search - Fatal编程技术网

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

Ruby on rails 如何使用ActiveRecord在SQLite3中设置FTS虚拟表?,ruby-on-rails,sqlite,full-text-search,Ruby On Rails,Sqlite,Full Text Search,我在Rails 3.0.9和SQLite 3.6.22(Ubuntu Lucid Lynx)中使用AR。我已将FTS3虚拟表添加到以前未使用FTS的数据库中。我不知道如何使用AR调用(例如create_table)来创建我想要的虚拟表。因此,我使用原始SQL创建并填充表。我从使用迁移开始。这在一开始运行得很好,但后来证明schema.rb是不完整的。不知何故,AR无法将FTS表转储到模式中。我一直没能解决这个问题 这意味着,例如,当我运行RSpec测试套件时,FTS表不在数据库中。我通过添加一个

我在Rails 3.0.9和SQLite 3.6.22(Ubuntu Lucid Lynx)中使用AR。我已将FTS3虚拟表添加到以前未使用FTS的数据库中。我不知道如何使用AR调用(例如create_table)来创建我想要的虚拟表。因此,我使用原始SQL创建并填充表。我从使用迁移开始。这在一开始运行得很好,但后来证明schema.rb是不完整的。不知何故,AR无法将FTS表转储到模式中。我一直没能解决这个问题

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


当前的安排实际上可以正常工作,因为动态构建虚拟表所需的时间非常少。但我确信我应该能够直接使用AR调用构建FTS表,我认为这将避免其他问题(表没有转储到schema.rb)。是否有通过AR与SQLite建立FTS的文档?我还没找到。谢谢。

您需要使用
config.active\u record.schema\u format
键在
config/application.rb
中将模式格式设置为SQL。AR实在无法将特定于数据库的内容转储到schema.rb中(缺少
连接#execute


另一个疯狂而可怕的选择是修补迁移,将这些执行语句存储在某个地方,并将它们作为
execute
调用放入schema.rb中。

我最终解决了这个问题,在实际看到这些响应之前很久就忘记了这个项目。但是我最近开始做一些开发,这又是一个障碍,所以我尝试应用上面的建议,将config.active\u record.schema\u format设置为:sql而不是:ruby。不幸的是,生活从来没有那么简单:


显然,Rails 3从来就没有这样做过。因此,我开始将该项目转换为Rails 4。我仍然有一些ActiveRecord agita需要整理,但是:sql设置似乎适用于AR 4.0中的schema_格式。

您如何处理
schema.rb
?它一直试图在半中断状态下更新自己。