Estoy totalmente atascado en este tema y no puedo encontrar ninguna respuesta a mi duda.
Intentaré explicarlo de la mejor manera posible, pero eso es bastante difícil.
Entonces, tengo un primer modelo (Receta), que almacena dentro de los ingredientes de la columna todos los ingredientes dentro de una matriz. También tengo un modelo de Ingredientes, que está conectado a través de una tabla de unión a Receta, que tiene como primera columna los nombres de todos los ingredientes disponibles.
Me gustaría incluir dentro de mi método de búsqueda una consulta que convierta la columna de ingredientes.nombre en una matriz y regrese del método de búsqueda solo aquellas recetas cuya matriz de ingredientes esté completamente contenida en la matriz de ingredientes.nombre.
Probé con esto
recipes = recipes.joins(:ingrediantizations).where('array_agg('ingredients.name') @> recipe.ingredients')Pero no está dando el resultado correcto: ingrediantizations es la tabla de unión.
¡Espero que me puedan ayudar!
Después de un par de días de pensar en esto, finalmente llegué a la solución.
Lo publico para que alguien pueda beneficiarse de él.
El segundo paso puede parecer extraño, pero supongo que es la única forma de crear una matriz con corchetes, como se requiere para las matrices literales en PSQL.
Ingredientes era el atributo que almacenaba los ingredientes en una matriz.
items = Item.pluck(:name) items = "{#{ items.map {|term| %Q("#{ term }") }.join(",") }}" recipes=recipes.where("ingredients <@?", "#{items}")