Загрузка нескольких изображений во вложенной форме

У меня есть вложенная форма для модели Item с вложенными атрибутами изображений. Весь код в основном такой же, как https://gist.github.com/mhenrixon/978371. Я пытался использовать загрузку файлов jQuery, как показано в railscast 381, но я Я могу загрузить только одно изображение. Насколько я могу судить, все выглядит так, как должно, и я понятия не имею, в чем проблема! ниже лог после попытки добавить несколько изображений с новым элементом

  Started POST "/admin/items" for 127.0.0.1 at 2013-05-03 13:06:53 +0100
Processing by Admin::ItemsController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"2xP9nuMsiWmGxrw2LLHNURahpdktDW7cf82WjOfXQh8=", "item"=>{"name"=>"ddd", "price"=>"", "description"=>"", "stock"=>"", "pictures_attributes"=>{"0"=>{"id"=>"", "attachable_id"=>"", "attachable_type"=>"Item", "image"=>#<ActionDispatch::Http::UploadedFile:0x007fea61735ae8 @headers="Content-Disposition: form-data; name=\"item[pictures_attributes][0][image]\"; filename=\"image.jpg\"\r\nContent-Type: image/jpeg\r\n", @tempfile=#<File:/var/folders/r3/1gzzfk2964b4tvvndtnr527m0000gn/T/RackMultipart20130503-25456-ynk0x0>, @content_type="image/jpeg", @original_filename="image.jpg">}}}, "button"=>""}
  Admin Load (0.2ms)  SELECT "admins".* FROM "admins" WHERE "admins"."id" = 1 LIMIT 1
   (0.2ms)  begin transaction
  SQL (0.7ms)  INSERT INTO "items" ("created_at", "description", "dimensions", "for_sale", "name", "price", "stock", "updated_at") VALUES (?, ?, ?, ?, ?, ?, ?, ?)  [["created_at", Fri, 03 May 2013 12:06:55 UTC +00:00], ["description", ""], ["name", "ddd"], ["price", nil], ["stock", nil], ["updated_at", Fri, 03 May 2013 12:06:55 UTC +00:00]]
  SQL (0.2ms)  INSERT INTO "pictures" ("attachable_id", "attachable_type", "created_at", "image", "updated_at") VALUES (?, ?, ?, ?, ?)  [["attachable_id", 47], ["attachable_type", "Item"], ["created_at", Fri, 03 May 2013 12:06:55 UTC +00:00], ["image", "image.jpg"], ["updated_at", Fri, 03 May 2013 12:06:55 UTC +00:00]]
   (3.7ms)  commit transaction
Redirected to http://localhost:3000/admin/items

person raphael_turtle    schedule 03.05.2013    source источник


Ответы (1)


Используйте атрибут имени вашего файла ввода в нотации массива

<input type="file" name="myname" />

Ваш javascript может выглядеть так:

if (formdata){
    formdata.append("myname[]", files);
}

Это также должно работать наоборот:

<input type="file" name="myname[]" />
person Tim Vermaelen    schedule 03.05.2013
comment
атрибут name я уже изменил на name=item[pictures_attributes][0][image], он вообще не работает, если он заканчивается массивом (он был установлен на name=item[pictures_attributes][0][image ][]) - person raphael_turtle; 03.05.2013