簡體   English   中英

Carrierwave多文件上傳Rails 5無法正常工作

[英]Carrierwave multi-file upload Rails 5 not working

在我的Rails應用程序中,我希望用戶能夠一次上傳多個文件。

我正在使用載波寶石

gem 'carrierwave', github: 'carrierwaveuploader/carrierwave'

在主分支上,該分支應該支持multiple: true

在我的互聯網搜索中發現了有關optional: true的必要添加的絕望optional: true在我的附件模型中為optional: true

我正在使用mysql,因此無法在數據庫中使用數組類型,但是我已經在數據庫中設置了has_manyRequestRequest_Attachment之間的belongs_to關系。

我的表格:

<%= f.fields_for :request_attachments do |ra| %>
  <div class="row" id="uploader">
    <div class="col-xs-12">
      <label class="btn btn-info"> Upload Files
        <%= ra.file_field :file, multiple: true, name: "request_attachments[file][]", :style => "display: none" %>
      </label>
    </div>
  </div>
<% end %>

我的控制器

  @request = Request.new(request_params)

  if @request.save
    if params[:request][:request_attachments] 
      params[:request][:request_attachments]['file'].each do |f|
        @request_attachment = @request.request_attachments.create!(:file => f)
      end
    end
    flash[:success] = "Your request was submitted successfully, check your email for a confirmation message."
    redirect_to action: 'index', status: 303
  else
    render :new
  end

def request_params 
  params.require(:request).permit(:jobtitle, :requester, :status, request_attachments_attributes: [:id, :request_id, :file])
end

我的模特:

請求:

class Request < ApplicationRecord

  has_many :request_attachments
  accepts_nested_attributes_for :request_attachments
end

Request_Attachments:

class RequestAttachment < ApplicationRecord
  mount_uploader :file, FileUploader
  belongs_to :request, optional: true
end

我嘗試過形式的變體,例如去掉name部分。

當我刪除“ multiple: true部分時,它會完美運行,但不適用於“ multiple選項。

我不太確定問題可能在哪里,因此任何幫助都將非常有用。

現在發生的事情是請求被保存,但是

  1. 僅創建了1個request_attachment,並且

  2. request_attachment的文件名為nil

好吧,我想我明白了。

我進行了一些更改,這引發了錯誤,並且我仔細查看了“參數哈希”,並發現實際上它看起來像這樣:

{"utf8"=>"✓",
 "request"=>
  {"jobtitle"=>"Testing, again and again, and again",
   "request_attachments_attributes"=>
    {"0"=>
      {"file"=>
        [#<ActionDispatch::Http::UploadedFile:0x007fee9df806b8
           @content_type="image/gif",
           @headers="Content-Disposition: form-data; name=\"blah\"; filename=\"logo1.gif\"\r\nContent-Type: image/gif\r\n",
           @original_filename="logo1.gif",
           @tempfile=blah,
         #<ActionDispatch::Http::UploadedFile:0x007fee9df80690
           @content_type="image\gif",
           @headers=
       "Content-Disposition: form-data; name=\"blah\"; filename=\"Blah.gif\"\r\nContent-Type: image/gif\r\n",
           @original_filename="Blah.gif",
           @tempfile=blahblah]}}

我注意到"0"=>並以為“等等。。。那是做什么的?。

因此,我刪除了表單中的name部分,並更改了控制器,使其看起來像這樣:

if @request.save
    params[:request][:request_attachments_attributes]["0"]['file'].each do |f|
      @request_attachment = @request.request_attachments.create!(:file => f)
    end

這似乎奏效了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM