Parece que, de manera predeterminada, Rails Active Storage anida sus cargas de archivos por medio de la key active_storage_blob asociada.
Las reglas parecen ser las siguientes para el comportamiento predeterminado. Dentro del <Rails.root>/storage/ :
key y crea un directoriokey y cree otro directoriokey completa Por ejemplo: donde la key de active_storage_blob asociado de un archivo en particular es: 2HadGpe3G4r5ygdgdfh5534346 , se vería así:
No quiero este comportamiento de anidamiento. Quiero almacenar los archivos planos dentro del directorio de almacenamiento. Así que simplemente quiero que se vea así:
¿Cómo puedo hacer eso? Una búsqueda en Google y una lectura completa de Active Storage Rails Guides no revelaron una solución.
También solo por curiosidad: ¿por qué es este el comportamiento predeterminado?
Buscando en el código de ActiveStorage DiskService, encontré el código que genera la estructura de carpetas. Todo está convenientemente contenido dentro de una sola función :
def folder_for(key) [ key[0..1], key[2..3] ].join("/") endEsto facilita la eliminación de la estructura de subcarpetas de dos letras con un simple parche:
module ActiveStorage class Service::DiskService < Service private def folder_for(key) "" end end endEs mejor hacer algunas pruebas en este parche, pero por lo que pude ver, debería funcionar bien.
La respuesta a la segunda pregunta no pude determinarla simplemente mirando el código de DiskService. No hay pistas sobre esta estructura de carpetas, por lo que las razones pueden estar en otra parte. Se puede hacer completamente con fines estéticos, para evitar un blob gigante de una sola carpeta en servidores grandes. Tal vez alguien que sepa más pueda comentar.