Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在rails4中使用回形针浏览多个文件_Ruby On Rails_Ruby On Rails 4_Paperclip - Fatal编程技术网

Ruby on rails 如何在rails4中使用回形针浏览多个文件

Ruby on rails 如何在rails4中使用回形针浏览多个文件,ruby-on-rails,ruby-on-rails-4,paperclip,Ruby On Rails,Ruby On Rails 4,Paperclip,我有三个领域 a) email b) phone number c) browse files (Here one link `add more file`) 当用户单击添加更多文件链接时,会出现一个浏览按钮,以此类推 我想在用户点击提交按钮时保存所有文件 我怎样才能在rails 4中使用回形针呢 模型 User.rb 发票.rb 我已将字段_用于视图中的发票 控制器 def new @user = User.new @user.invoices.build end def crea

我有三个领域

a) email
b) phone number
c) browse files (Here one link `add more file`)
当用户单击添加更多文件链接时,会出现一个浏览按钮,以此类推

我想在用户点击提交按钮时保存所有文件

我怎样才能在rails 4中使用回形针呢

模型

User.rb

发票.rb

我已将字段_用于视图中的发票

控制器

def new
  @user = User.new
  @user.invoices.build
end

def create
  User.create(user_params)
end

看起来您当前的设置对一个文件很有效,但是如果您想添加多个文件,您需要再次构建对象并加载一个新的字段以支持该设置。为此,我建议使用Ajax:

我不知道这是否有效,但这就是我解决问题的方法:

将您的字段放入部分 在表单上,使用:remote=>:true包含+按钮 控制器将处理AJAX请求并构建一个新对象 在成功的AJAX请求中,加载一个包含新字段的部分 查看提交是否包含所有文件 为部分用户创建字段

您的表单可能如下所示:

<%= f.fields_for :invoices do |field| %>
    <%= field.file_field :image %>
<% end %>
<%= link_to "+", your_controller_action, :remote => :true %>
这将呈现一个新对象,然后可以使用返回的JS将其附加到表单:

#app/views/controller/new.js.erb
$("form").append("<%=j render :partial => 'images_fields', locals: {f: @user} %>")
看看它是否提交了所有文件

我的代码可能无法工作,因为它需要调试。然而,这是我将使用的过程。如果您尝试,我们可以在注释中进行调试

让我知道进展如何

<%= f.fields_for :invoices do |field| %>
    <%= render :partial => 'images_fields', locals: {f: field} %>
<% end %>
<%= f.file_field :image %>
<%= link_to "+", your_controller_action, :remote => :true %>
#app/controllers/your_controller.rb
def new
  @user = User.new
  @user.invoices.build

  respond_to do |format|
      format.js { @user.invoices.build }
      format.html 
  end
end
#app/views/controller/new.js.erb
$("form").append("<%=j render :partial => 'images_fields', locals: {f: @user} %>")