2012-07-23 116 views
11

我在使用回形針上傳多個文件的問題,上傳多個文件使用回形針

我的模型是這樣

slider has_many imgarrays 

imgarrays has_many imageobjects 

imageobjects have_attachment(as for paperclip) 

我沒有問題接受單個圖像,並使用上回形針保存它我其他模型,但我不知道如何處理多個文件上傳期間由imgarrays param返回的數組。

這裏是我的鋼軌服務器日誌:

Started POST "/slider" for 127.0.0.1 at 2012-07-23 10:14:17 +0800 
    Processing by SliderController#create as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"7HcHtSlOsU/bnxb9emhAsSl/GFBraIE6NxwijHl3REM=", "slider"=>{"question"=>"", "answer"=>"", "score"=>"", "industry_name"=>"", 
    "imgarrays"=>[#<ActionDispatch::Http::UploadedFile:0x007fb471e99f30 @original_filename="Icon.png", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"slider[imgarrays][]\"; filename=\"Icon.png\"\r\nContent-Type: image/png\r\n", @tempfile=#<File:/var/folders/2s/n9wb5x4534nfs1cbrlph32v00000gp/T/RackMultipart20120723-53499-1lyi4yf>>, #<ActionDispatch::Http::UploadedFile:0x007fb471e99dc8 @original_filename="[email protected]", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"slider[imgarrays][]\"; filename=\"[email protected]\"\r\nContent-Type: image/png\r\n", @tempfile=#<File:/var/folders/2s/n9wb5x4534nfs1cbrlph32v00000gp/T/RackMultipart20120723-53499-10lala2>>, #<ActionDispatch::Http::UploadedFile:0x007fb471e99d50 @original_filename="greenButton.png", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"slider[imgarrays][]\"; filename=\"greenButton.png\"\r\nContent-Type: image/png\r\n", @tempfile=#<File:/var/folders/2s/n9wb5x4534nfs1cbrlph32v00000gp/T/RackMultipart20120723-53499-or2rdk>>]}, "commit"=>"Create!"} 
Completed 500 Internal Server Error in 18ms 

ActiveRecord::AssociationTypeMismatch (Imgarray(#70206507050500) expected, got ActionDispatch::Http::UploadedFile(#70206487229960)): 
    app/controllers/slider_controller.rb:12:in `new' 
    app/controllers/slider_controller.rb:12:in `create' 

Rendered /Users/Kinnovate/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.1.1/lib/action_dispatch/middleware/templates/rescues/_trace.erb (1.4ms) 
Rendered /Users/Kinnovate/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.1.1/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (1.4ms) 
Rendered /Users/Kinnovate/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.1.1/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (6.5ms) 

new.html.erb的滑塊

<div> 
<%= form_for @slider ,:url=>"/slider" , :html => { :multipart => true } do |f| %> 

     <%= f.label :question , "question"%> 
     <%= f.text_field :question %> </br> 
     <%= f.label :answer , "answer array (comma seperated)"%> 
      <%= f.text_field :answer %> </br> 
     <%= f.label :score , "score"%> 
    <%= f.text_field :score %> </br> 
      <%= f.label :industry_name , "industry"%> 
       <%= f.text_field :industry_name %> </br> 

     <%= f.label :attachedimg , "image"%> 
     <%= f.file_field :imgarrays, :multiple =>:true %> </br> 

     <%= f.submit "Create", class: "btn btn-large btn-primary" %> 
    <% end %> 

</div> 
<%= link_to 'Cancel', slider_index_path %> 
+0

你不能使用while循環迭代返回的數組嗎? – pat34515 2012-07-23 02:43:48

+0

哦,男人,這樣一個簡單的解決方案,謝謝!你能發表一個答案,我可以接受嗎? – henghonglee 2012-07-23 03:06:57

+0

[Paperclip,multiple attachments and validation]的可能重複(http://stackoverflow.com/questions/4800985/paperclip-multiple- attach-ments-and-validation) – 2015-04-23 20:18:12

回答

11

這裏是我的代碼,效果很好用回形針上傳多個文件: 我們可以實現使用嵌套屬性或使用普通的簡單方法。

下面的代碼顯示正常方法:

User.rb

的has_many:圖像,:依賴=>:破壞

Image.rb

has_attached_file :avatar,:styles => {:medium =>「300x300>」}

belongs_to的:用戶

用戶/視圖/ new.html.erb

<%= form_for @user, :html => { :multipart => true } do |f| %> 

...... 
.... 

<%= file_field_tag :avatar, multiple: true %> 

<% end %> 

Users_controller:

.....

if @user.save 
    # params[:avatar] will be an array. 
    # you can check total number of photos selected using params[:avatar].count 
     params[:avatar].each do |picture|  

     @user.images.create(:avatar=> picture) 
     # Don't forget to mention :avatar(field name) 

     end 
    end 

完蛋了。圖片上傳,這可能不是好方法,但它的工作原理。