Лучший подход к загрузке нескольких файлов в Ruby on Rails - PullRequest
3 голосов
/ 06 декабря 2010

Я задал подобный вопрос здесь с неудачными ответами: Uploadify + Paperclip + вложенная рельсовая ассоциация before_save

Итак, я переформулирую свой вопрос:

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

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

Заранее спасибо! Martin.

Ответы [ 2 ]

3 голосов
/ 19 декабря 2010

Я использую это с одним из моих рельсов 3 приложения:

= form_for :import_csv, :url => {:action => :import_csv}, :html => {:multipart => true} do |f|
  = f.file_field :csv
  = f.submit 'Upload CSV'

Это создает временный файл, который можно получить с помощью

CSV.open(params[:import_csv][:csv].tempfile.path)

Я не вижу причин, по которым это нельзя было бы распространить на несколько загрузок, и доступ к ним был params[:import_csv][:whatever]

Примечание ** обработка временных файлов была немного изменена в rails 3.0.3, поэтому в приведенном выше коде используется .tempfile.path, который не требовался в предыдущих версиях.

0 голосов
/ 08 декабря 2010

Более года назад я столкнулся с подобной проблемой и не смог найти готового решения, поэтому сделал следующее:
1. С помощью SWFUpload загрузите изображения в действие «store_image», которое сохраняет, изменяет размер, ... и возвращает путь к миниатюре и идентификаторам загруженного изображения.
2. Используя JS, поместите идентификаторы изображений в скрытые поля. Я использовал одно поле со значением типа «2312111: 3231231: 323212».
3. При создании «главного» объекта найдите загруженные изображения по их идентификаторам и установите их связь с объектом.

Также сборщик мусора удаляет несвязанные изображения, созданные более 3 дней назад. Сборщик мусора работает cron каждый день.

На мой взгляд, это самое элегантное решение.

__
Извините за мой плохой английский

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...