【问题标题】:Can one use paperclip to upload multiple files using one multi file selection input?一个人可以使用回形针通过一个多文件选择输入上传多个文件吗?
【发布时间】:2012-08-11 20:15:22
【问题描述】:

所以我在我的 rails 3.1 应用程序中使用回形针,

我正在使用关系向项目添加图像,以便每个项目可以有多个图像。

我想做的是能够单击浏览按钮并仅使用单个字段选择多个文件。而不是必须为每个字段一次处理一张图片。

有人知道如何做到这一点,或者有一个不需要 Flash 插件的绝佳选择吗?

【问题讨论】:

    标签: image ruby-on-rails-3.1 paperclip


    【解决方案1】:

    我只使用一个控制器,没有关联(我的只是用于将多张图片上传到画廊),但我已经成功地做到了你的要求。您将需要对其进行调整以适应您的关系,但它对我很有用(虽然在 IE 中不起作用),但我确信它打破了一些轨道约定,但这是我能想到的唯一方法来构建功能。

    第一步是使用HTML5的multiple标签设置上传字段接受多个文件:

    <%= f.file_field :photo, multiple: 'multiple' %>
    

    或者,如果你像我一样使用 simple_form:

    <%= f.input :photo, input_html: { multiple: 'multiple' } %>
    

    下一步是将创建控制器操作更改为接受并处理多个文件。这是我确定有些人会反对的一点,但是嘿,它有效!

    def create
    
      params[:photo][:photo].each do |photo|
    
        @params = {}
        @params['photo'] = photo
    
        @photo = Photo.new(@params)
    
        if !@photo.save
          respond_to do |format|
            format.html { redirect_to new_photo_path, error: 'An error occured uploading.' }
          end
        end
      end
    
      respond_to do |format|
        format.html { redirect_to photos_path, notice: 'Photos were successfully uploaded.' }
      end
    end
    

    它比看起来简单 - 对我来说,控制器名称是 photo,字段名称也是如此,这解释了 params[:photo][:photo]。它基本上只接受请求的:photo 属性(控制器通常需要一个文件)并遍历已上传的文件,为每个文件创建一个新的Photo 并设置@paramsphoto 属性依次成为每个文件,然后尝试将其保存为新的Photo 并在发生错误时发出警报,否则一旦完成它将重定向以显示照片。

    正如我所说,这对我很有用,我希望它对你也有帮助:)

    编辑如果这没有帮助,您能告诉我原因吗?在有人花时间帮助后忽略这条信息不会让其他人想要帮助你。

    【讨论】:

      【解决方案2】:

      不要修改控制器,只需在表单字段中添加name: 属性,如下所示:

      <%= f.input_field :photo, as: :file, multiple: true, name: 'article[photo]' %>
      

      【讨论】:

        【解决方案3】:

        我是这样做的:

        params[:photo][:photo].each do |photo|
          record = Photo.create(photo: photo)
          # if record.errors.any?
          #   flash[:notice] = record.errors.full_messages.to_sentence
          # end
        end
        

        请参阅this post 了解保存多条记录的替代方法。

        【讨论】:

          猜你喜欢
          • 2015-08-06
          • 1970-01-01
          • 2023-02-12
          • 1970-01-01
          • 1970-01-01
          • 2012-04-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多