Как я могу использовать ActiveRecord для настройки виртуальной таблицы FTS в SQLite3? - PullRequest
3 голосов
/ 03 октября 2011

Я использую 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. У меня также должна быть отдельная задача заполнения базы данных для построения таблицы FTS после заполнения.

Текущее расположение на самом деле работает нормально, поскольку создание виртуальной таблицы на лету занимает так мало времени. Но я уверен, что я должен быть в состоянии построить таблицу FTS, используя вызовы AR напрямую, что, я полагаю, позволит избежать другой проблемы (таблицы не выгружаются в schema.rb). Есть ли документация по настройке FTS с SQLite через AR? Я не смог найти ни одного. Спасибо.

Ответы [ 2 ]

2 голосов
/ 02 декабря 2011

Вам необходимо установить формат схемы на SQL в config/application.rb с помощью клавиши config.active_record.schema_format. На самом деле AR не может выкинуть подобные вещи из базы данных в schema.rb (если не считать Connection#execute)

Сумасшедшей удивительной альтернативой было бы исправление миграций, чтобы хранить эти инструкции выполнения где-нибудь и помещать их в schema.rb как execute звонки.

1 голос
/ 07 августа 2013

В конце концов я обошел проблему и немного забыл о проекте задолго до того, как увидел эти ответы.Но я недавно начал заниматься некоторыми разработками, и это снова стало препятствием, поэтому я попытался применить приведенное выше предложение, задав для config.active_record.schema_format значение: sql вместо: ruby.К сожалению, жизнь никогда не бывает такой простой:

schema.sql не создается даже после установки schema_format =: sql

Видимо, это просто никогда не работало с Rails 3. Так что яя начал преобразовывать проект в Rails 4. У меня все еще есть немного Agita ActiveRecord, чтобы разобраться, но кажется, что настройка: sql работает для schema_format в AR 4.0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...