gpt4 book ai didi

jquery - 如何将 jquery-fileupload 用于嵌套附件?

转载 作者:数据小太阳 更新时间:2023-10-29 06:47:03 25 4
gpt4 key购买 nike

我正在使用 jquery-fileupload-rails用于多个文件上传。

我想实现设置文档名称并向其添加多个附件的能力。

但是现在,当我选择 3 个附件时,它会创建 3 个文档,每个文档都有一个附件。

我想我需要以某种方式更改添加附件的形式。我添加了多个选项和硬编码名称。

我想使用这个插件,因为稍后我想添加拖放功能。

来自

= simple_form_for [:member, @document], html: { multipart: true } do |f|
= f.input :name
= f.simple_fields_for :attachments, Attachment.new do |a|
= a.file_field :attachment, multiple: true, name: "document[attachments_attributes][][attachment]"
= f.submit

生成:

<input id="document_attachments_attributes_0_attachment" multiple="multiple" name="document[attachments_attributes][][attachment]" type="file">

JS

jQuery ->
$('#new_document').fileupload()

模型

class Document < ActiveRecord::Base
has_many :attachments
accepts_nested_attributes_for :attachments
end

class Attachment < ActiveRecord::Base
belongs_to :document

has_attached_file :attachment
end

Controller

class Member::DocumentsController < ApplicationController
def new
@document = Document.new
end

def create
@document = Document.new params[:document]

if @document.save
redirect_to member_documents_path, notice: "Created"
else
redirect_to member_documents_path, alert: "Not created"
end
end

private

def document_params
params.require(:document).permit(:name, attachments_attributes: [:attachment])
end
end

最佳答案

我用两个单独的表单做了类似的事情。基本上,您为文档创建一个表单,其中包含一个名称字段和一个用于 attachment_ids 的隐藏字段,然后是一个用于附件的表单。您可以单独上传附件(不幸的是,它们当时是孤立的记录),然后使用新创建的附件记录的 ID 更新文档下的隐藏字段。

基本上,从附件 Controller 创建一个 json 响应,包括新创建对象的 ID。然后创建一个 javascript 函数,将每个成功回调中新创建的 ID 添加到隐藏字段。

我确信有一种更简单的方法可以做到这一点,但我总是对多文件上传和嵌套属性感到有点困惑。

编辑:所以我找到了一些旧代码并将其移植过来。

class Member::AttachmentsController < Member::BaseController

def create
@attachment = Attachment.create!(params[:attachment])
# TWO APPROACHES, render json view, or respond with a .js view create.js.erb
# render json: @attachment.to_json

end

end

class Member::DocumentsController < Member::BaseController

def create
@document = Document.new params[:document]
@attachments = Attachment.find(params[:attachment_ids].split(','))
if @document.save
@document.attachments = @attachments
redirect_to member_documents_path, notice: "Created"
else
redirect_to member_documents_path, alert: "Not created"
end
end
end

然后你要么在截图中创建一个create.js.erb

var screenshotContainer, 
idContainer;

screenshotContainer = $('#attachments');
idContainer = $('#attachment_ids_hidden_field');

screenshotContainer.append('<%= j render @attachment %>');

idContainer.val(function(i, v) {
var arr = v.split(', ');
arr.push('<%= @attachment.id %>');
return arr.join(', ');
});

例如,这可能是一个屏幕截图渲染调用,但您可以根据需要在部分中显示它。

<%= image_tag(attachment.attachment, size: "100x100", data: { attachment_id:     attachment.id }) if attachment.attachment? %>

在文档表单中创建

<input type="hidden" id="attachment_ids_hidden_field" value="" name="attachment_ids">

另一种方法是使用 json 进行响应,并在文件上传的 done 回调中将新附件的 json ID 添加到隐藏字段。

你需要解析 hidden_​​id 的任何困惑可能比仅仅解析 .split(',') 更好

我还没有机会仔细研究它。

希望对您有所帮助。

关于jquery - 如何将 jquery-fileupload 用于嵌套附件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19812737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com