Lo que quiere usar es el @>
operador
, que comprueba si el valor de la izquierda contiene el valor de la derecha. "Contiene" funciona tanto para objetos como para matrices, por lo que la siguiente consulta funcionaría:
SELECT * FROM products WHERE specs->'spec_options' @> '["spec1", "spec2"]';
Que creo que puede transformar en una sintaxis compatible con ActiveRecord así:
scope :with_spec_options, ->(spec_options) {
where("specs->'spec_option' @> ?", spec_options.to_json)
}