обработка массива изображений в rails/скрепке

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

<label>Additional Images*<span class="note">(Maximum: 3, 200 pixels wide)</span></label>
<%= f.file_field :images, { :multiple => "", :accept => "image/*" } %>
<div id="images"></div>

У меня есть некоторый javascript, который проверяет, были ли выбраны только 3 изображения или меньше, а также создает миниатюры изображений и добавляет их в качестве дочерних элементов в div#images. Когда пользователь отправляет форму, параметр :images заполняется массивом информации об изображении, который выглядит следующим образом:

[ #<ActionDispatch::Http::UploadedFile:0x00000007269588
   @original_filename="test_banner.jpeg",
   @content_type="image/jpeg",
   @headers="Content-Disposition: form-data; name=\"custom_form[images][]\"; filename=\"test_banner.jpeg\"\r\nContent-Type: image/jpeg\r\n",
   @tempfile=#<File:/tmp/RackMultipart20120726-7134-3hqdve>>,
  #<ActionDispatch::Http::UploadedFile:0x00000007269510
   @original_filename="test_portrait.jpeg",
   @content_type="image/jpeg",
   @headers="Content-Disposition: form-data; name=\"custom_form[images][]\"; filename=\"test_portrait.jpeg\"\r\nContent-Type: image/jpeg\r\n",
   @tempfile=#<File:/tmp/RackMultipart20120726-7134-18fcs0m>>,
  #<ActionDispatch::Http::UploadedFile:0x00000007269498
   @original_filename="test_signiture.jpeg",
   @content_type="image/jpeg",
   @headers="Content-Disposition: form-data; name=\"custom_form[images][]\"; filename=\"test_signiture.jpeg\"\r\nContent-Type: image/jpeg\r\n",
   @tempfile=#<File:/tmp/RackMultipart20120726-7134-1q5fy2f>> ]

В моей модели у меня есть 3 атрибута:

has_attached_file :image1,
  ...

has_attached_file :image2,
  ...

has_attached_file :image3,
  ...

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


person Huub Mons    schedule 26.07.2012    source источник


Ответы (1)


Я настоятельно рекомендую вам просто создать 3 x file_fields. Тогда все выровняется, и все ваши проверки будут работать. Я знаю, что это не так гладко, но для 1-3 изображений... Не так уж и много.

person TomDunning    schedule 26.07.2012
comment
Я знаю, что это было бы намного проще, но это было бы очень неудобно для пользователя, а для моего приложения это очень важно - person Huub Mons; 27.07.2012