【问题标题】:CarrierWave Multiple file UploadCarrierWave 多文件上传
【发布时间】:2017-12-06 18:11:21
【问题描述】:

我正在尝试使用载波上传多个文件。每当我尝试上传文件时,我都能够上传唯一的单个文件。即使我在平面图控制器下的 permit({image: []}) 中添加了哈希数组。

它是控制器。

class FloorplansController < ApplicationController

def create
    @project = Project.find(params[:project_id])
    @floorplan  = Floorplan.create(params[:floorplan].permit(:name,{image: []}))
    @floorplan.user_id = current_user.id
    @floorplan.project_id = @project.id

    if @floorplan.save
        redirect_to project_path(@project)
    else
        render 'new'
    end
end

结束

这是我上传文件的部分表单。

= simple_form_for([@project, @project.floorplans.build],input_html: {multiple: true }) do |f|
= f.input :name, label: "Name the Floorplan"
= f.input :image, input_html: {multiple: true }, name:"floorplan[image][]", label: "Attach the Floorplan Image"
= f.button :submit, class: "button"

之后,我按照 RailsCast 第 381 集的说明附加了 jquery 文件上传器 平面图.咖啡 jQuery -> $('#new_floorplan').fileupload()

这些是我的数据库迁移

class AddImageToFloorplans < ActiveRecord::Migration[5.1]
   def change
     add_column :floorplans, :image, :string
   end
end

【问题讨论】:

  • 您可以在创建操作的开头放置一个 byebug。只是为了确保您是否正在获取图像数组。
  • 您是否使用嵌套属性来上传图片?
  • 我认为你应该使用f.simple_fields_for(floorplans)
  • @gabbar 是的,我正在尝试使用嵌套属性,因为我找到了上传多个文件的解决方案。将 f.simple_fields_for 代替 ??
  • 嗯,如果你不介意,我可以给你一个简单的想法来上传多个文件。你可以这样做。

标签: jquery ruby-on-rails carrierwave


【解决方案1】:

1- 在 Gemfile 中

gem 'jquery-rails'
gem 'jquery-ui-rails'
gem 'nested_form_fields'

2- application.js.erb

//= require jquery
//= require jquery_ujs
//= require nested_form_fields
//= require jquery-ui
//= require turbolinks
//= require_tree .

3- in new 动作

def new
  @project = Peoject.new
  @project.@project.floorplans.build
end

4.- 在视图中

<%= form_for @project do |f| %>
    <%= f.text_field :name, class: 'form-control' %>
   <%=f.nested_fields_for :floorplans do |floorplan|%>
     <%=floorplan.remove_nested_fields_link 'Remove'%>
     <%=floorplan.file_field :image%>
   <%end%>
   <%=f.add_nested_fields_link :floorplans, 'Add Photo'%>
  <%= f.submit 'Submit', class: 'btn btn-primary' %>
<% end %>

5- 在create 动作中

def create
    @project = Project.new(project_params)
    if @floorplan.save
        redirect_to project_path(@project)
    else
        render 'new'
    end
end

private
def project_params
  params.require(:project).permit(:name, floorplans_attributes: [:image])
end

6- 更多reference你可以关注这个

【讨论】:

    猜你喜欢
    • 2012-05-22
    • 2013-09-15
    • 1970-01-01
    • 2018-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多