2012-08-11 58 views
4

所以我在我的rails 3.1應用程序中使用回形針,可以使用回形針使用一個多文件選擇輸入來上傳多個文件嗎?

我正在使用關係將圖像添加到項目,以便每個項目可以有多個圖像。

我想要做的是能夠單擊瀏覽按鈕並使用單個字段選擇多個文件。而不必一次爲每個領域製作一張圖片。

任何人都知道如何做到這一點,或有一個偉大的選擇,這樣做不需要Flash插件?

回答

6

我只使用一個控制器,沒有關聯(我只是將多個圖像上傳到一個畫廊),但我設法做你在問什麼。你需要適應它來處理你的關係,但是它對我很好(雖然在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並提醒是否發生錯誤,否則一旦完成,它將重定向以顯示照片。

正如我所說,這對我的偉大工程,我希望這有助於你太:)

編輯如果這沒有幫助,你能告訴我爲什麼嗎?在有人花時間幫助之後,忽略這些信息並不會讓其他人想要幫助你。

2

不要修改控制器,只需添加name:屬性的表單字段是這樣的:

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

這是我如何做的:

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多個記錄。

相關問題