2011-05-03 18 views
7

Estoy creando un formulario de varias partes en el estilo que Ryan Bates describe aquí:forma multi-paso en Rails 3 con archivos adjuntos Paperclip

http://railscasts.com/episodes/217-multistep-forms
http://asciicasts.com/episodes/217-multistep-forms (versión basada en texto)

A Resumir, tengo una vista (con un montón de parciales para cada paso de formulario) y las variables de formulario se almacenan en una sesión cuando el usuario hace clic en el botón siguiente y se muestra una parte diferente del formulario.

Uno de mis pasos de formulario permite al usuario cargar varias imágenes a través de la gema Paperclip. El problema es que Rails está intentando subir los datos de imagen a la sesión, que devuelve TypeError "no se puede volcar File".

¿Cuál es una buena manera de hacerlo?

ACTUALIZACIÓN: He intentado un montón de piedras preciosas (wizardly, acts_as_wizard, y algunos otros de menor tamaño), pero ninguno de ellos parece funcionar con Rails 3.

también he intentado simplemente almacenar los datos en una matriz hasta que la forma esté completa, pero eso estaba causando que mi controlador se volviera enorme y desordenado.

Respuesta

1

Guardar modelos en la sesión funciona a menos que desee guardar un File en la sesión. Los complementos del asistente están usando la sesión para almacenar modelos entre los pasos. No producen errores en modelos válidos en mi caso solo en inválidos.

Así que borrar el archivo adjunto sonaba una buena idea, pero en mi caso, borrar el archivo adjunto de clip con Attachment#clear no fue suficiente porque aún quería guardar un poco de File.

he descubierto que el problema era con el atributo @queued_for_write en Attachment que todavía contenía los datos.

Así que las dos líneas siguientes resuelto mi problema:

unless @model.valid? 
    @model.image.clear 
    @model.image.queued_for_write.clear 
end 

Esto fue un error clip y se corrigió en this commit.

Cuestiones relacionadas