Многошаговая форма в Rails 3 с приложениями Paperclip
Я создаю форму из нескольких частей в стиле, который описывает здесь Райан Бейтс:
http://railscasts.com/episodes/217-multistep-forms
http://asciicasts.com/episodes/217-multistep-forms (текстовая версия)
Подводя итог, у меня есть одно представление (с кучей партиалов для каждого шага формы), и переменные формы сохраняются в сеансе, когда пользователь нажимает следующую кнопку, и отображается другая часть формы.
Один из моих шагов формы позволяет пользователю загружать несколько изображений через драгоценный камень Paperclip. Проблема заключается в том, что Rails пытается загрузить данные изображения в сеанс, который возвращает TypeError "не может сбросить файл".
Какой хороший способ пойти по этому поводу?
ОБНОВЛЕНИЕ: я пробовал несколько драгоценных камней (wizardly, acts_as_wizard и некоторые другие меньшие), но ни один из них, похоже, не работает с Rails 3.
Я также пытался просто хранить данные в массиве, пока форма не будет заполнена, но это привело к тому, что мой контроллер стал огромным и грязным.
1 ответ
Сохранение моделей в сеанс работает, если вы не хотите сохранить File
в сессию. Плагины мастера используют сеанс для хранения моделей между шагами. Они не выдают ошибок на действительных моделях, в моем случае только на инвалидах.
Так что очистка вложенного файла звучит неплохо, но в моем случае очистка вложения скрепки с помощью Attachment#clear
было недостаточно, потому что он все еще хотел сохранить некоторые File
,
Я узнал, что проблема была с @queued_for_write
приписывать Attachment
который все еще содержал данные.
Следующие две строки решили мою проблему:
unless @model.valid?
@model.image.clear
@model.image.queued_for_write.clear
end
Это была ошибка скрепки и была исправлена в этом коммите.