Многошаговая форма в Rails 3 с приложениями Paperclip - PullRequest
7 голосов
/ 04 мая 2011

Я создаю форму из нескольких частей в стиле, который описывает здесь Райан Бейтс:

http://railscasts.com/episodes/217-multistep-forms
http://asciicasts.com/episodes/217-multistep-forms (текстовая версия)

Подводя итог, у меня есть одно представление (с кучей частичных чисел для каждого шага формы), и переменные формы сохраняются в сеансе, когда пользователь нажимает следующую кнопку и отображается другая часть формы.

Один из моих шагов формы позволяет пользователю загружать несколько изображений через жемчужину Paperclip.Проблема заключается в том, что Rails пытается загрузить данные изображения в сеанс, который возвращает TypeError «не может создать дамп файла».

Какой хороший способ это сделать?

ОБНОВЛЕНИЕ: я пробовал несколько драгоценных камней (wizardly, acts_as_wizard и некоторые другие меньшие), но ни один из них, похоже, не работает с Rails 3.

Я также пытался просто хранить данные вмассив, пока форма не будет заполнена, но это заставило мой контроллер стать огромным и грязным.

1 Ответ

1 голос
/ 10 ноября 2011

Сохранение моделей в сеансе работает, если вы не хотите сохранить File в сеансе.Плагины мастера используют сеанс для хранения моделей между шагами.Они не выдают ошибок на действительных моделях в моем случае только на инвалидах.

Так что очистка вложенного файла звучит неплохо, но в моем случае очистка вложения скрепки с Attachment#clear было недостаточно, потому что он все еще хотел сэкономить File.

Я обнаружил, что проблема была в атрибуте @queued_for_write в Attachment, который все еще содержалdata.

Таким образом, следующие две строки решили мою проблему:

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

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

...