Я никогда не использовал acts_as_ferret
. Вот что вы могли бы сделать. Создайте таблицу примерно так:
create_table(:indexed_models) do |t|
t.column :name, :string
t.column :model_id, :id
t.column :index, :string
end
Для каждой модели, по которой вы хотите выполнить поиск, объедините значения из столбцов с возможностью поиска, чтобы создать «индекс». Вставьте результаты в таблицу indexed_models. Где имя - это имя модели, model_id - это ее первичный ключ, а index - контент для поиска. Используйте наблюдатели для создания и обновления таблицы indexed_models, когда модели, которые вы определили как «доступные для поиска», изменяются.
Выполните текстовый поиск по полю индекса indexed_models, затем сгенерируйте контейнер моделей на основе возвращаемого имени модели и первичного ключа.
Я никогда не использовал этот подход, но я тоже имел в виду.