Donde como consulta con matriz
Frecuentes
Visto 860 veces
0
Tengo un modelo de seguimiento con 4 columnas de valores de cadena separados por comas que deben poder buscarse por cualquier número de términos.
p.ej
Track.first.genre => "Alternative, Lite Rock, Indie Rock, Psychedelic"
Track.first.mood => "Aggressive, Angry, Dark, Driving, Energetic, Heavy"
Track.first.tempo => "Fast, Medium"
Track.first.artist => "something"
Luego, un usuario puede usar cualquier número de términos para reducir la lista de pistas mostradas. Estoy recopilando los términos en matrices que coinciden con cada columna. p.ej
genres = params[:genre].split(",")
moods = params[:mood].split(",")
y así. Entonces, si los géneros => ["Rock", "Alternativa"], eso coincidiría con todas las Pistas que contienen cualquiera de esos términos en la columna de género, y todos los términos adicionales se seleccionarían de esa matriz devuelta, y así sucesivamente para cada uno de los 4 columnas
¿Cuál es la mejor manera de hacer esto y cómo escribo una consulta where usando like con una matriz como condición?
1 Respuestas
1
^ Considere usar modelos para el género, el estado de ánimo y el tempo. ActiveRecord hará que las consultas que los involucran sean mucho más fáciles.
^ El serialize
declaración podría ahorrarle algo de traducción.
^ Puede buscar los elementos de la matriz que desee con su llamada where, por ejemplo:
class Track < ActiveRecord::Base
def self.for_genre(name)
where "genre like '%#{name}%'"
end
end
Esto significa elegir nombres que no sean subcadenas de otros nombres.
Respondido el 13 de junio de 12 a las 04:06
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas ruby-on-rails or haz tu propia pregunta.
Creo que podrías necesitar reevaluar tus entidades y relaciones... Parece que los géneros/estados de ánimo/tempi tienen una relación de muchos a muchos con las pistas. - Platinum Azure
@PlatinumAzure: esos son todos los atributos del modelo Track. Originalmente, cada una iba a ser una sola cadena, pero desde entonces el cliente ha agregado varias cadenas en cada columna, lo que hace que mi consulta ("género en (?)", géneros) quede inutilizable. - aperture
Estoy diciendo que su diseño (teniendo esos atributos del modelo de pista) probablemente necesite ser reelaborado. Deben ser sus propios modelos. Me lo agradecerás más tarde. - Platinum Azure
De acuerdo con PA. Una vez que el cliente agregó el requisito de múltiples géneros, la solución correcta sería dividir esa relación en muchos a muchos con géneros en su propia tabla. - Emily