Carrierwave - 一次上传多个图像,为每个图像创建模型对象

时间:2016-03-17 01:21:54

标签: ruby-on-rails carrierwave

我正在使用带有carrierwave gem的Rails 4。我有一个模型user_item_images user_item有许多user_item_images

schema.rb

  create_table "user_item_images", force: :cascade do |t|
    t.integer  "user_item_id"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.string   "picture"
  end

我需要一个可以接受多张图片的表单,并为每张图片创建自己的模型对象。

形式

<%= form_for :user_item_image, url: user_item_user_item_images_path(@user_item) do |f| %>
    <%= f.file_field :picture, multiple: true %>
    <%= f.submit %>

控制器

  def create
    # raise 'foo'
    @user_item = UserItem.find_by_id(params[:user_item_id]).user_item_images.create(user_item_image_params)
    redirect_to :back
  end

  private

  def user_item_image_params
    params.require(:user_item_image).permit(:picture)
  end

我在控制器的创建操作中引发了一个错误,检查user_item_image_params的值,我得到{}

如何一次提交多张图片并为​​每张图片创建一个单独的模型对象?

更新

按照下面的答案,我将我的参数更改为:

  def user_item_image_params
    params.require(:user_item_image).permit({picture: []})
  end

但是当我提交时没有任何反应。我想我需要重写我的创建动作。基本上如果我有

>>  user_item_image_params
=> {"picture"=>[#<ActionDispatch::Http::UploadedFile:0x007f67d9b77d28 @tempfile=#<Tempfile:/tmp/RackMultipart20160317-588761-mjk73n.JPG>, @original_filename="IMG_0313.JPG", @content_type="image/jpeg",   @headers="Content-Disposition: form-data; name=\"user_item_image[picture][]\"; filename=\"IMG_0313.JPG\"\r\nContent-Type: image/jpeg\r\n">, #<ActionDispatch::Http::UploadedFile:0x007f67d9b77d00 @tempfile=#<Tempfile:/tmp/RackMultipart20160317-588761-edqw7.JPG>, @original_filename="IMG_0314.JPG", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"user_item_image[picture][]\"; filename=\"IMG_0314.JPG\"\r\nContent-Type: image/jpeg\r\n">, #<ActionDispatch::Http::UploadedFile:0x007f67d9b77cd8 @tempfile=#<Tempfile:/tmp/RackMultipart20160317-588761-buatxk.JPG>, @original_filename="IMG_0315.JPG", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"user_item_image[picture][]\"; filename=\"IMG_0315.JPG\"\r\nContent-Type: image/jpeg\r\n">]}

如何从每张图片中制作模型对象,在本例中为3。

1 个答案:

答案 0 :(得分:0)

图像需要作为哈希和数组传递。

def user_item_image_params
  params.require(:user_item_image).permit({picture: []})
end

此外,您的模型应使用mount_uploaders代替mount_uploader

class UserItemImages
  mount_uploaders   :picture
end