Ruby on Rails:Dropzone js,获取[object Object],但是为什么?
我在缩略图上找到了[对象对象](背景图片是您可以点击上传照片的区域...我不知道如何加载类似于http://www.dropzonejs.com/中的示例的普通框)Ruby on Rails:Dropzone js,获取[object Object],但是为什么?
查看
<%= simple_form_for @project do |f| %>
<div class="dropzone dz-clickable dz-square" id="mydrop">
<div class="dz-default dz-message" data-dz-message=""></div>
<div id="bi_previews"></div>
<div class="fallback">
<%= f.file_field :beautiful_image %></div>
</div>
</div>
<% end %>
CoffeeScript的
$(document).on 'ready page:load', ->
Dropzone.autoDiscover = false
$('div#mydrop').dropzone
url: '/projects'
previewsContainer: "#bi_previews"
headers: "X-CSRF-Token" : $('meta[name="csrf-token"]').attr('content')
paramName: "project[beautiful_image]"
init: ->
@on 'success', (file, json) ->
@on 'addedfile', (file) ->
@on 'drop', (file) ->
alert 'file'
return
return
的routes.rb
Rails.application.routes.draw do
devise_for :users
resources :projects
控制器
def project_params
params.require(:project).permit(
:user_id, :beautiful_image, :title_name, :remove_project_images_files, project_images_files: [],
project_images_attributes: [:id, :project_id, :photo, :_destroy]).merge(user_id: current_user.id)
end
模型
has_attached_file :beautiful_image, :styles => { :large => "800x800>", :medium => "500x500>", :thumb => "150x150#" }, :default_url => "/images/:style/missing.png"
validates_attachment_content_type :beautiful_image, content_type: /\Aimage\/.*\Z/
编辑
根据注释requets发帖控制器
def new
@project = Project.new
@gear = Gear.new
@project.gears.build
@project.project_images.build
end
def edit
@project = Project.find(params[:id])
end
def create
@project = Project.new(project_params)
respond_to do |format|
if @project.save
format.html { redirect_to @project, notice: 'Project was successfully created.' }
format.json { render :show, status: :created, location: @project }
else
format.html { render :new }
format.json { render json: @project.errors, status: :unprocessable_entity }
end
end
end
在Rails你不能在不使用表单POST数据。除非token_authentication
已关闭,否则Rails将验证每个请求的CSRF令牌。在您的代码中,您使用div ID
初始化了dropzone
。所以服务器无法验证您的authenticity token
。
ApplicationController根据情况调用protect_from_forgery。所有控制器都从ApplicationController继承,并且似乎没有CSRF漏洞。然而,通过动态分析,我发现应用程序事实上容易受到CSRF的影响。
因此,使用表单的id初始化您的dropzone。
HTML代码
<%= simple_form_for @project, class: 'dropzone', id: 'project-form' do |f| %>
<div class="fallback">
<%= f.file_field :beautiful_image, multiple: true %>
</div>
<% end %>
和你的Javascript想这
var objDropZone;
Dropzone.autoDiscover = false;
$("#project-form").dropzone({
acceptedFiles: '.jpeg,.jpg,.png',
maxFilesize: 5, //In MB
maxFiles: 5,
addRemoveLinks: true,
removedfile: function (file) {
if (file.xhr.responseText.length > 0) {
var fileId = JSON.parse(file.xhr.responseText).id;
$.ajax({
url: '/projects/' + fileId,
method: 'DELETE',
dataType: "json",
success: function (result) {
console.log('file deleted successfully');
var _ref;
return (_ref = file.previewElement) != null ? _ref.parentNode.removeChild(file.previewElement) : void 0;
},
error: function() {
console.log('error occured while deleteing files');
}
});
}
},
init: function() {
objDropZone = this;
this.on("success", function (file, message) {
console.log('file uploaded successfully')
});
this.on("error", function (file, message) {
var _ref;
return (_ref = file.previewElement) != null ? _ref.parentNode.removeChild(file.previewElement) : void 0;
});
}
});
我越来越像'POST http:// localhost:3000/projects 422(Unprocessable Entity)' – hellomello
您使用的是嵌套窗体吗? 这是dropzone的问题,你不能使用嵌套的形式,因为dropzone直接提交自己的形式,而我们选择图像 –
stackoverflow.com/questions/27206296/ruby-on-rails-image-upload-with-dropzone-嵌套表单 –
我检查的地点;顶部只有一个例子。我认为它没有配置缩略图..你看到的例子在哪里? – songyy
@songyy你是什么意思?有一个'试试看'部分。上传任何图片,上传后会看到缩略图 – hellomello
我可以看到缩略图,但当我将鼠标悬停在缩略图上时,这里没有任何弹出窗口。有什么我错过了吗? – songyy