gpt4 book ai didi

ruby-on-rails - Dropzonejs 和 Paperclip、url 和 paramName?

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

如果您要自定义放置区,我不明白 URLparamName 应该是什么?

Dropzone.autoDiscover = false
$('#new_picture').dropzone
url: '/projects'
maxFilesize: 1
paramName: 'project_images[photos]'
addRemoveLinks: true

我很确定我的 paramName 和 url 是错误的。

我有这样的嵌套回形针:

<%= simple_form_for @project, html: { multipart: true } do |f| %>
<div class='dropzone' id="new_picture">
<div class="fallback">
<%= file_field_tag "photos[]", multiple: true %>
</div>
</div>
<% end %>

我有一个 project_image.rb

class ProjectImage < ActiveRecord::Base

belongs_to :project
has_attached_file :photo,
:styles => {
:large => "800x800>",
:thumb => "150x150#" },
:default_url => "/images/:style/missing.png"
validates_attachment_content_type :photo, content_type: /\Aimage\/.*\Z/
attachment :file

end

我的参数在 projects_controller.rb 中看起来像这样

def project_params
params.require(:project).permit(
:user_id,
project_images_attributes: [:id, :project_id, :photo, :_destroy])
end

只是为了展示我创建的样子

def create
@project = Project.new(project_params)

respond_to do |format|
if @project.save

if params[:photos]
params[:photos].each { |image|
@project.project_images.create(photo: image)
}
end
end
end
end

最佳答案

实际上 url 是在您的 form 没有定义操作时指定的。我像这样使用 dropzone.js:

= form_tag new_drag_drop_photo_path, method: :post, class: "dropzone form-horizontal", id: "media-dropzone", :authenticity_token => true do
= file_field_tag "photo", multiple: true

现在当照片被拖放到我的 dropzone 字段中时,它将被发送到这样定义的这个 Action :

Started POST "/new_drag_drop_photo" for 127.0.0.1 at 2015-07-24 10:55:04 +0530
Processing by PhotosController#new_drag_drop_photo as JSON
Parameters: {"utf8"=>"✓", "authenticity_token"=>"rmp7BwrEoa7iCesuPifQm60YwAemDCfq6t7soQ==", "file"=>#<ActionDispatch::Http::UploadedFile:0x007f6b78ab5190 @tempfile=#<Tempfile:/tmp/RackMultipart20150724-4280-1obqg7k.jpg>, @original_filename="bridal-dresses-4.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"file\"; filename=\"bridal-dresses-4.jpg\"\r\nContent-Type: image/jpeg\r\n">}

现在您没有使用 form,而是使用 div,这就是为什么您需要定义 url 的原因拖动时将发送照片。这将是一个 json 请求,dropzone 将期望来自服务器的 json 响应。所以你需要一个 Controller 的 Action ,就像我指定的那样:

def new_drag_drop_photo
@photo = Photo.new(image: params[:file], name: params[:file].original_filename.split('.')[0])
if @photo.save!
respond_to do |format|
format.json{ render :json => @photo }
end
else
render json: { error: @photo.errors.full_messages.join(',')}, :status => 400
end
end

现在我从文件本身获取文件名。当您像这样在 dropzone 配置中提供它时:paramName: 'project_images[photos]' 然后它将在文件发送到 Controller 的操作时传递此名称。因为你在这里使用了嵌套形式,所以我也使用了它,但我使用了一些 jquery 来向它添加 photo_ids。所以我要做的是先上传照片并保存在数据库中,然后在嵌套表单中分配 id。

希望这对您有所帮助。

关于ruby-on-rails - Dropzonejs 和 Paperclip、url 和 paramName?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31601126/

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