Dieser Ausdruck:
to_tsvector('simple', (COALESCE(title::TEXT), ''))
ist nicht mit Ihrem Index kombinierbar.
Sie sollten den Index auf genau den Ausdruck deklarieren, der in der Abfrage verwendet wird:
CREATE INDEX products_gin_title
ON products
USING GIN(to_tsvector('simple', COALESCE(title::TEXT,'')))
(oder lassen Sie Ruby den Ausdruck generieren, der im Index verwendet wird).
Wenn Sie möchten, dass mehrere Spalten indiziert werden, verketten Sie sie einfach:
CREATE INDEX products_gin_title
ON products
USING GIN(to_tsvector('simple', title || ' ' || product_type || ' ' || platform_id))
Aber noch einmal, Ruby sollte nach genau demselben Ausdruck filtern, damit der Index von Nutzen ist.