Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

428
Vistas
¿Rails 7 ayuda a SECAR los archivos adjuntos de imagen?

¡Tengan paciencia conmigo, soy nuevo en las publicaciones y Rails, así que lo siento si me equivoco al redactar!

Estoy trabajando en una aplicación Rails con muchos modelos similares. Cada vista tiene un _form.html.haml parcial que difiere en contenido pero contiene componentes similares, como botones para enviar, eliminar, etc. Cada modelo tiene_muchas_fotos adjuntas, y en el formulario puede agregar o eliminar fotos. El haml para eliminar fotos se ve así, donde la variable se reemplaza con cualquier vista en la que se encuentre _form.html.haml :

 .gallery#form - @VARIABLE.photo.each_with_index do |image, index| .overlay-container .img-square{ :style => "background-image: url(#{rails_blob_url(photo(@VARIABLE, index))})", :alt => "Photo of #{image}" } = link_to("Delete", delete_image_attachment_VARIABLE_url(image), method: :delete, class: 'button delete overlay')

Para que la eliminación funcione en cada foto, este código está en cada controlador:

 def delete_image_attachment @photo = ActiveStorage::Attachment.find(params[:id]) @photo.purge redirect_back fallback_location: @VARIABLE flash[:success] = 'Photo was successfully deleted.' end

Y routes.rb tiene este trozo de código para cada modelo:

 resources :VARIABLE do member do delete :delete_image_attachment end end

Sin embargo, tengo alrededor de una docena de modelos en los que necesito hacer esto. Mi objetivo es llevar la galería a un nuevo parcial, ya que se usará en cada _form independientemente del otro contenido. Sin embargo, la función de eliminación (aunque la misma para todos los controladores) está vinculada al controlador/routes.rb de cada modelo.

Debe haber alguna forma de SECAR esta funcionalidad en un par de archivos en lugar de copiar y pegar para cada modelo, pero mis búsquedas en Google no han arrojado nada. Por lo tanto, ¡cualquier guía o mejor convención de Rails es muy apreciada!

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Si estoy entendiendo la estructura correctamente, parece que querrías hacer algo como lo siguiente:

Cree un controlador de nivel superior que maneje la eliminación de imágenes

  • Esto podría ser utilizado por cualquier página.
  • Esto requeriría los siguientes parámetros de consulta:
    • id de la foto para borrar.
    • redirect a dónde redirigir al usuario una vez completada la acción.

Rutas

Ahora solo habrá 1 ruta para manejar el controlador de arriba.

Crear un parcial reutilizable

Para representar una colección de imágenes con una URL de redireccionamiento que le permite establecer el siguiente estado para el parcial:

  • photos una colección de imágenes para renderizar.
  • redirect_url esto se pasa como un parámetro de consulta al controlador de imágenes de eliminación centralizado.

Pensamientos y ejemplos simulados

Esto debería poder SECAR su implementación. Actualmente, lo único que veo que combina la vista con la eliminación es la URL de redireccionamiento. Al abstraer eso y moverlo esencialmente a un parámetro para el parcial permitirá la reutilización y la flexibilidad.

Ya identificó su acoplamiento a través de @VARIABLE , aquí hay una muestra rápida de cómo esperaría que terminara luciendo:

Plantilla parcial

 .gallery#form - @photos.each_with_index do |image, index| .overlay-container .img-square{ :style => "background-image: url(#{rails_blob_url(photo(@VARIABLE, index))})", :alt => "Photo of #{image}" } = link_to("Delete", delete_image_attachment_url(image, redirect: @redirect_url), method: :delete, class: 'button delete overlay')

Esto requeriría: photos y redirect_url Así que asegúrese de configurar @photos y @redirect_url en el controlador de consumo.

Ejemplo con propiedades de instancia para acceder en la plantilla

 @photos = GET_PHOTOS_HERE @redirect_url = 'some-redirect-path' render partial: 'photos_partial'

Ejemplo con parámetros locales para la plantilla

 photos = GET_PHOTOS_HERE render partial: 'photos_partial', locals: { photos: photos, redirect: 'some-redirect-path' }`

Nota : es posible que deba cambiar la forma en que accede a las variables locales en la plantilla.

https://guides.rubyonrails.org/layouts_and_rendering.html#passing-local-variables

Controlador

 def delete_image_attachment @photo = ActiveStorage::Attachment.find(params[:id]) @photo.purge redirect_back fallback_location: params[:redirect] flash[:success] = 'Photo was successfully deleted.' end

Rutas

Aquí solo tendría la ruta única para eliminar cualquier archivo adjunto de imagen y señalaría el único controlador de arriba.

 delete 'resources/image_attachment/:id', to: 'resources#delete_image_attachment'

Nota : Reemplace "recursos" con el nombre de su controlador, o el alcance/nombre que le gustaría.

PD : Ha pasado un tiempo desde que hice Rails, así que no estoy completamente seguro de la precisión o de su entorno.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda