通过传递参数数组来上传多个没有任何gem的文件

时间:2019-01-28 09:27:35

标签: ruby-on-rails

我有一个可以向其中添加多个图像的表单。

<%= form_with(model: photo, remote: true, multipart: true) do |form| %>
    <input type="file" name="images" accept="image/png, image/jpeg" multiple>

    <%= form.submit %>
<% end %>

我想通过参数将多个图像传递给我的控制器方法。通过参数上传到方法后,我想循环浏览并创建这样的链接。

  def create
      Rails.logger.debug "#{params[:images]}"
      params[:images].each do |image|
        @photo = current_user.photos.new(photo_params)
        @value = Cloudinary::Uploader.upload(params[:image], :categorization => "google_tagging", :auto_tagging => 0.7)
        @photo.link = @value['secure_url']
        @photo.tag_list = @value['tags']
        @photo.save
      end
      redirect_to root_path
  end

该方法返回一个文件并说 方法“每个”未定义。

如何传递上传的所有图像的数组?

1 个答案:

答案 0 :(得分:2)

您需要向图像中添加数组“ []”的形式,如下所示(根据您自己的逻辑进行更改):

<%= form_with(model: photo, remote: true, multipart: true) do |form| %>
    <% (1..5).each do %>
          <input type="file" name="images[]" accept="image/png, image/jpeg" multiple>
    <% end %>

    <%= form.submit %>
<% end %>

更新: 感谢@SRack指出数字索引不是必需的,iamges [0],images [1]可以工作,但实际上,一种形式的参数“ images []”就足够了。