Многошаговая форма в 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

Это была ошибка скрепки и была исправлена ​​в этом коммите.

Другие вопросы по тегам