首页 > 解决方案 > 使用 CarrierWave 上传多个文件作为数据库中的单个记录

问题描述

对不起,我被困住了。如何使用 CarrierWave 上传多个文件并一一保存?我不想有一个包含多个文件的数组,但每个文件都应该单独保存。我有一个接受多个文件的表格。但我只能找到将整个上传保存为一个条目的方法。如何从具有多个文件的参数创建单个对象?

谢谢你的帮助!

编辑:

这是我的控制器:

class ImagesController < ApplicationController
  def new
    @image = Image.new
  end

  def create
    @image = Image.new(image_params)
    if @image.save
      flash[:primary] = "Image uploaded"
      redirect_to images_path
    else
      render 'new'
    end
  end

  def index
    @images = Image.all
    @categories = Category.all
  end

  private
  def image_params
    params.require(:image).permit({image: []}, :image_title, :image_file_size,  :image_content_type, :image_description, :category_id, :image_creation_date, :image_uploader)
  end
end

此代码有效。问题是我不知道如何迭代参数。我可以访问各个参数。但是我不能一一存储。

这是我的审判:

  def create
    image_params['image'].each do |img|
      @image = Image.new(img)
      @image.save
    end
    redirect_to images_path
  end

错误是:

ArgumentError Exception: When assigning attributes, you must pass a hash as an argument, ActionDispatch::Http::UploadedFile passed.

我知道我没有哈希,只有单个文件,这是错误。但我不知道该怎么做。

标签: ruby-on-railscarrierwave

解决方案


推荐阅读