Загрузка файла AJAX при создании объекта в рельсах с помощью скрепки - PullRequest
0 голосов
/ 14 апреля 2011

У меня проблема с головной болью, которую я не могу найти легким решением.

У меня есть пара моделей, каждая с вложенным изображением, принадлежащая пользователю.Я сделал очень хорошую форму для загрузки AJAX-файлов и обрезки изображений, но есть проблема.Все отлично работает, когда я редактирую объекты, которые уже есть в базе данных, но когда я загружаю файл, когда создаю новый объект, это не так.Дело в том, что для загрузки и сохранения изображения объект уже должен находиться в базе данных.Я нашел два возможных решения этой проблемы, но ни одно из них не будет работать должным образом.

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

Второе возможное решение состоит в том, чтобы убрать поля вложения измодель для отдельной модели.При создании мне нужно будет только создать объект вложения.Если пользователь отменит его, он оставит вложение без присмотра, но это, вероятно, нормально, поскольку детей-сирот можно периодически очищать.Проблема с этим заключается в том, что я не могу найти способ запретить пользователям захватывать осиротевшие изображения или любое другое изображение ради этого.Если я не могу решить эту проблему, я застрял.

У меня нет идей, и мне действительно нужна помощь в этом вопросе.

Спасибо, godisemo

РЕДАКТИРОВАТЬ:

Мне, наверное, было неясно.В моей форме есть возможность загрузить изображение.Изображение загружается на сервер с помощью javascript, перед отправкой формы.Причина в том, что я хочу позволить пользователям обрезать изображение.Это не проблема при работе с существующими объектами, но при создании новых, как я пытался объяснить ранее.

Ответы [ 2 ]

0 голосов
/ 18 апреля 2011

Я решил проблему сейчас, с совершенно другим подходом. Вместо того, чтобы думать о базах данных, объектах и ​​моделях, я решил это, используя файловую систему и временные файлы. Когда изображение загружено, оно обрабатывается скрепкой, затем я перемещаю сгенерированные изображения в папку, где я могу их контролировать.

Я основал свое решение на действительно замечательной статье, которую вы можете найти здесь, http://ryantownsend.co.uk/articles/storing-paperclip-file-uploads-when-validation-fails.html

0 голосов
/ 14 апреля 2011

Мне никогда не приходилось иметь модель в БД, чтобы скрепка работала.

Одна вещь, которую вы можете попробовать, это следующее. Я не знаю, как называется ваша модель, но скажем, у пользователя есть изображение. Создайте новую форму так, чтобы все ваши пользовательские поля передавались в params [: user] var, но затем отделяйте файл загрузки изображений отдельно от params [: user], скажем params [: my_image].

Затем в вашем контроллере подтвердите и сохраните пользователя, затем после user.save прикрепите изображение.

...