ruby-on-rails - 使用回形针上传多个文件

标签 ruby-on-rails ruby paperclip

我在使用回形针上传多个文件时遇到问题,

我的模型是这样的

slider has_many imgarrays

imgarrays has_many imageobjects

imageobjects have_attachment(as for paperclip)

我在接收单个图像并在我的其他模型上使用回形针保存它没有问题,但我不确定如何在多个文件上传期间处理 imgarrays 参数返回的数组。

这是我的 Rails 服务器日志:

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="Icon@2x.png", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"slider[imgarrays][]\"; filename=\"Icon@2x.png\"\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)

slider 的 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 %>

最佳答案

这是我的代码,可以很好地使用回形针上传多个文件: 我们可以使用嵌套属性或使用普通的简单方法来实现。

下面的代码显示了正常的方法:

用户.rb

has_many :images, :dependent => :destroy

图片.rb

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

belongs_to :user

用户/views/new.html.erb

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

...... 
 ....

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

<% end  %>

用户 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

就是这样。图片已上传,这可能不是好方法,但它有效。

关于ruby-on-rails - 使用回形针上传多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11605787/

相关文章:

ruby-on-rails - 有没有办法手动推送 NewRelic 错误?

ruby - 如何检索 nokogiri 处理指令属性?

ruby-on-rails - 如何通过 Paperclip rails 4 上传图片、word 文档和/或 PDF 文件

amazon-s3 - 亚马逊 aws-s3 访问被拒绝错误

ruby-on-rails - 在 Ruby on Rails 中以 simple_form 添加字符计数器

ruby-on-rails - 如何用 cucumber 测试sidekiq

mysql - 如何计算Rails应用程序上每个用户的存储空间?

ruby - Shopify 液体模板调试

ruby - 在 erb 中使用 block (Sinatra,而不是 Rails)

ruby-on-rails - 奇怪的回形针错误消息