2015-07-18 51 views
5

我在缩略图上找到了[对象对象](背景图片是您可以点击上传照片的区域...我不知道如何加载类似于http://www.dropzonejs.com/中的示例的普通框)Ruby on Rails:Dropzone js,获取[object Object],但是为什么?

enter image description here

查看

<%= 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 
+0

我检查的地点;顶部只有一个例子。我认为它没有配置缩略图..你看到的例子在哪里? – songyy

+0

@songyy你是什么意思?有一个'试试看'部分。上传任何图片,上传后会看到缩略图 – hellomello

+0

我可以看到缩略图,但当我将鼠标悬停在缩略图上时,这里没有任何弹出窗口。有什么我错过了吗? – songyy

回答

8

在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; 
       }); 
      } 
     }); 
+0

我越来越像'POST http:// localhost:3000/projects 422(Unprocessable Entity)' – hellomello

+0

您使用的是嵌套窗体吗? 这是dropzone的问题,你不能使用嵌套的形式,因为dropzone直接提交自己的形式,而我们选择图像 –

+0

stackoverflow.com/questions/27206296/ruby-on-rails-image-upload-with-dropzone-嵌套表单 –

相关问题