Alcance inusual en los rieles
-
12-11-2019 - |
Pregunta
Necesito hacer un alcance donde encuentro todos los archivos que tienen ciertas extensiones: mi intento actual no funcional es este:
scope :visual, where(%w[.gif .jpg .jpeg .tif .tiff].include? File.extname(item_file_name), true)
Este intento me da errores: ¿cómo crea los ámbitos donde las condiciones no son solo una consulta SQL recta?
Solución
Necesitas codificar estos criterios directamente.
scope :visual, where("RIGHT(item_file_name,3) IN (?)
OR RIGHT(item_file_name,4) IN (?)",
['gif', 'jpg', 'tif'],
['jpeg', 'tiff'])
Recomiendo almacenar la extensión de archivo o el tipo MIME como su propia columna, y consultando eso.Será más actor de lo que usar funciones de cadena.La implementación en sí sería similar, pero más sencilla.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow