【问题标题】:Rails: Multiple image upload at the same time with DragonflyRails:使用蜻蜓同时上传多个图像
【发布时间】:2016-02-26 23:04:38
【问题描述】:

我正在使用 Dragonfly 将图像上传到与其他模型关联的模型 Photo。例如:

模型:发布

class Post < ActiveRecord::Base
  has_many :photos, dependent: :destroy

  accepts_nested_attributes_for :photos, allow_destroy: true,
                                reject_if: lambda {|attributes| attributes['image'].blank?}

模特照片

class Photo < ActiveRecord::Base
  extend Dragonfly::Model::Validations

  dragonfly_accessor :image

  dragonfly_accessor :image do
    after_assign { |img| img.encode!('jpg', '-quality 80') }
  end

即使我将输入更改为同时上传多个文件,它也能正常工作

窗体视图:

作品:

<%= f.fields_for :photos do |photo| %>
    <%= photo.file_field :image, class: "form-control"  %>
<% end%>

不起作用:

<%= f.fields_for :photos do |photo| %>
    <%= photo.file_field :image, class: "form-control", multiple: true, name: 'photo[image]' %>
<% end%>

如何将多个文件同时上传到关联模型?

谢谢!

更新:

我试过了:

控制器。创建动作

   @post = Post.new(seminovo_params)
    params[:photos]['image'].each do |a|
      @photo = @post.photos.create!(:image => a)
    end

查看

     <%= f.fields_for :photos, @post.photos.new do |photo| %>
        <%= photo.file_field :image, :multiple => true, name: "photos[image][]"  %>

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 upload nested-forms dragonfly-gem


    【解决方案1】:

    你需要定义参数并以这种方式获取这些参数

    你的新方法应该包含

    def new
     # Your new form object 
     @photo = @post.photos.build
    end
    

    在控制器方法中使用这个

    params[:photos]['avatar'].each do |a|
      @photo = @post.photos.create!(:image => a)
    end
    

    你的表单应该是这样的,

    <%= form_for(@post, :html => { :multipart => true }) do |f| %>
      <%= f.fields_for :photos do |p| %>
        <div class="field">
          <%= p.label :image %><br>
          <%= p.file_field :image, :multiple => true, name: "photos[image][]" %>
        </div>
    <% end %>
    

    【讨论】:

    • @headers="Content-Disposition: form-data; name=\"photos[image][]\"; filename=\"10395806_685294291596378_3110064580239039583_n.jpg\"\r\nContent-Type: image /jpeg\r\n">, #<:http::uploadedfile:0x00000006aa22f0>, @original_filename="10475439_705162236276250_748751211960 ="image/jpeg", @headers="Content-Disposition: form-data; name=\"photos[image][]\"; filename=\"10475439_705162236276250_7487512119604520758_o.jpg\"\r\nContent-Type: image/ jpeg\r\n">, #
    • 照片阵列看起来像空的。我更新了上面的代码。
    • 您添加了新方法。查看我的编辑。并从中删除@post.photos.new。
    • 还不行。这个“头像”参数是什么?如果我删除@post.photos.new,我会为每个上传的文件获得一个输入文件,以及一个用于上传新图像的输入文件。我只是想要一个输入来在表单上上传一张或多张新照片,因为我添加了一个新参数,这是我发现不会出现很多输入文件的一种方式
    • 你能分享一下仓库地址吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多