2012-09-10 11 views
9

Me di cuenta de que no hay una solución que use jQuery-File-Upload y Carrierwave o Dragonfly para hacer que la capacidad en una página al crear publicaciones para agregar imágenes múltiples. Tengo dos modelos, una publicación con muchas imágenes. Me gustaría cargar la imagen inmediatamente después de agregarla y tengo la opción de cancelarla antes de guardar la publicación completa. Mi código no funciona, así que no lo pegué aquí, tal vez alguien tiene un ejemplo, si este concepto es factible con jQuery-File-Upload? Si no hay otra forma de guardar varias fotos y mantener la vista de arranque? Encontré buenos ejemplos que representarían una funcionalidad similar a la esperada pero con Upladify: FormFly o solo con Carrierwave y nested_form: carrierwave-nested_form. En jQuery-File-Upload git wiki es tutorial cómo usarlo solo con un modelo en Rails.¿Cómo usar JQuery-File-Upload para subir varias imágenes en una página durante la creación de la publicación?

me gustaría conseguir algo como esto: enter image description here

+1

Tengo el mismo problema con una aplicación similar a la tuya. Esta pregunta aquí puede darle alguna pista: http://stackoverflow.com/questions/9357607/rails-3-jquery-file-upload-nested-model –

Respuesta

11

El principal problema con todo esto es la pregunta "¿Cómo se puede crear una asociación con un objeto que no existe?". Bueno, no puedes. Lo que puedes hacer es la siguiente mejor opción, ser más listo. Te mostraré cómo hacerlo, en 3 sencillos pasos. Intencionalmente no publico ningún código, ya que el proceso en sí debería ser bastante claro y aplicable a una variedad de enfoques (no solo limitado a jQuery-File-Upload y Carrierwave o Dragonfly).

Paso 1

Configuración de cada parte de la relación como normal, de forma independiente. Use un andamio (o lo que sea) para generar una nueva publicación. Justo debajo del formulario para la publicación, implemente su solución de carga de fotos como siempre. Yo usaría los controladores y parciales propios de cada objeto, como es normal, para evitar que estas cosas se mezclen indeleblemente. No te preocupes por el código de relación de asociación todavía.

Paso 2

Añadir el código de relación con sus modelos. No se preocupe porque la interfaz aún no los asocia adecuadamente.

Paso 3(la parte divertida)

Ahora, para mantenerlo todo junto. Tenemos imágenes creadas, pero no pertenecen a ninguna publicación. También tenemos publicaciones que se crean sin ninguna de sus imágenes. Necesitamos alguna manera de completar esta asociación. La solución es bastante simple. Debe crear un campo de texto oculto en el formulario de publicaciones para contener los ID de las imágenes que se asociarán a la publicación. Luego, su respuesta de creación de imagen, agregue el ID de la nueva imagen al campo de texto al mismo tiempo que agrega la nueva imagen a la página.De forma similar, en el controlador posterior, simplemente recorra los ID del campo oculto y asocie el (los) objeto (s) objetivo (s) antes de guardar. Probablemente desee agregar una lógica similar al botón cancelar, como eliminar la ID de la matriz cuando la imagen se elimine de la página. También es posible que desee agregar una tarea programada para limpiar la imagen pasada una cierta edad que no esté asociada a una publicación, para eliminar cualquier desorden de los formularios abandonados.

+0

No lo entiendo tanto ... Cuando definas un modelo de imagen anidado en otro (digamos aquí, la publicación), todos se crean al mismo tiempo. JQfileUpload no se activa exactamente de la misma manera que llama a la url para cada archivo cargado; pero ¿no sería posible superarlo (por ejemplo, llamar a la url una vez con muchos archivos enviados a través del formulario para crear un único modelo de publicación), lo que significa volver a un comportamiento de modelo anidado en rieles "normales"? – Ben

+0

Esto aborda específicamente la carga de imágenes asíncrona. Si su proceso no requiere esto, entonces sí, una implementación anidada tradicional tendría algunas ventajas (aunque, aún así, algunas desventajas potenciales, también). –

+0

Sí, claro, pero ¿y si quiero crear una publicación con imágenes adjuntas, todo al mismo tiempo? – Ben

3

me encontré con un pequeño ejemplo de subir las imágenes multible con JqueryFileUpload en los carriles con carrierwave.

Actualmente estoy trabajando en una mejor solución para volver a cargar cargas de archivos de múltiples archivos con JqueryFileUpload pero este tema no es tan fácil.

In this example

generar un andamio post con el cuerpo: cadena cuando se configura una instancia de un mensaje nuevo objeto en la nueva acción pictures_controller se puede implementar un formulario para un puesto en el cuadros/nueva vista.

<%= form_for(@post) do |f| %> 
    <div class="field"> 
    <%= f.label :body %><br /> 
    <%= f.text_field :body %> 
    </div> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 
+0

Vi este ejemplo, pero para mí no se corresponde con el correo principal modelo. Gracias por una nueva concepción. – roza

+2

Hola roza he ahorrado el repo de bootsrap-uploader para mostrarte cómo lo resuelvo. compruébalo https://github.com/bulleric/bootstrap_uploader. Necesitas crear una publicación, luego puedes subir imágenes en la vista de mostrar mensajes (publicaciones/1) importar y necesitas una identificación postal válida. si desea cargar imágenes al mismo tiempo, primero debe guardar la publicación. no puede guardar una relación que no se guarda en la base de datos. en mi aplicación, creo un andamio de carga que es solo para guardar las imágenes. cuando se completa la carga, llamo a un método de confirmación que guarda el post_id en las imágenes. – bulleric

+0

Ok, lo pensé, aunque en [FormFly] (https://github.com/rdetert/FormFly) esto se hace de forma asincrónica, puede con jQuery-File-Upload agregar imágenes en el mismo paso es imposible o tal vez la solución es demasiado difícil. Sé cómo agregar fotos después de la publicación creada en el siguiente paso, en una página esto es un callejón sin salida. Dejo la pregunta todavía abierta pero gracias por su contribución. – roza

Cuestiones relacionadas