所以我在我的rails 3.1應用程序中使用回形針,可以使用回形針使用一個多文件選擇輸入來上傳多個文件嗎?
我正在使用關係將圖像添加到項目,以便每個項目可以有多個圖像。
我想要做的是能夠單擊瀏覽按鈕並使用單個字段選擇多個文件。而不必一次爲每個領域製作一張圖片。
任何人都知道如何做到這一點,或有一個偉大的選擇,這樣做不需要Flash插件?
所以我在我的rails 3.1應用程序中使用回形針,可以使用回形針使用一個多文件選擇輸入來上傳多個文件嗎?
我正在使用關係將圖像添加到項目,以便每個項目可以有多個圖像。
我想要做的是能夠單擊瀏覽按鈕並使用單個字段選擇多個文件。而不必一次爲每個領域製作一張圖片。
任何人都知道如何做到這一點,或有一個偉大的選擇,這樣做不需要Flash插件?
我只使用一個控制器,沒有關聯(我只是將多個圖像上傳到一個畫廊),但我設法做你在問什麼。你需要適應它來處理你的關係,但是它對我很好(雖然在IE中不起作用),但我確定它違反了一些軌道約定,但這是我能夠構建的唯一途徑功能。
的第一步是設置上傳字段使用HTML5多標籤接受多個文件:
<%= 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 [email protected]
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
並將photo
屬性@params
設置爲每個文件,然後嘗試將其保存爲新的Photo
並提醒是否發生錯誤,否則一旦完成,它將重定向以顯示照片。
正如我所說,這對我的偉大工程,我希望這有助於你太:)
編輯如果這沒有幫助,你能告訴我爲什麼嗎?在有人花時間幫助之後,忽略這些信息並不會讓其他人想要幫助你。
不要修改控制器,只需添加name:
屬性的表單字段是這樣的:
<%= f.input_field :photo, as: :file, multiple: true, name: 'article[photo]' %>
這是我如何做的:
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多個記錄。