O que você deseja usar é o
@>
operador
, que testa se o valor do lado esquerdo contém o valor do lado direito. "Contém" funciona para objetos e matrizes, portanto, a seguinte consulta funcionaria:SELECT * FROM products WHERE specs->'spec_options' @> '["spec1", "spec2"]';
Que eu acredito que você pode transformar em sintaxe compatível com ActiveRecord assim:
scope :with_spec_options, ->(spec_options) {
where("specs->'spec_option' @> ?", spec_options.to_json)
}