2015-09-02 16 views
1

我使用的是Rails 4,其中PaperclipDropzone.js。我有一个表格,用户可以填写所有内容,并可以上传照片,而不必让Dropzone自动上传。所以,使用下面的js它将“搁置”,直到我点击提交按钮。如何使用Dropzone.js和Rails 4提交页面重定向?

items/_form.html.erb

<%= form_for(@item, html: {class: 'form-horizontal form dropzone', multipart: true}) do |f| %> 
    <%= token_tag(nil) %> 
    <%= f.file_field :image, class: 'img-input', accept: 'image/png, image/jpeg, image/jpg', multiple: false %> 
    <%= f.submit 'Done', class: 'btn btn-primary btn-lg btn-block item-submit' %> 
<% end %> 

items.js

$(document).ready(function() { 

    // disable auto discover 
    Dropzone.autoDiscover = false; 

    var dropzone = new Dropzone (".dropzone", { 
    maxFiles: 1, 
    maxFilesize: 1, 
    paramName: "item[image]", 
    addRemoveLinks: true, 
    clickable:'#dropzonePreview', 
    previewsContainer: '#dropzonePreview', 
    thumbnailWidth: 300, 
    thumbnailHeight: 300, 
    autoProcessQueue: false, 
    uploadMultiple: false 
    }); 

    $(".item-submit").click(function (e) { 
    e.preventDefault(); 
    e.stopPropagation(); 
     dropzone.processQueue(); 
    } 
); 

}); 

Routes

resources :items 

ItemsController

def new 
    @item = current_user.items.build 
    end 

    def create 
    @item = current_user.items.build(item_params) 

    if @item.save 
     redirect_to @item, notice: "item was successfully created" 
    else 
     render 'new' 
    end 
    end 

我遇到的问题是,我可以创造一个新的项目并拖动ñ下降的相片,但是之后我提交表单,而不是重定向到项目/显示,它将保持在同一页上,并呈现错误:

EDITED

Started POST "/items" for 127.0.0.1 at 2015-09-02 15:19:36 -0700 
Processing by ItemsController#create as JSON 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>............ 

    [1m[35m (11.6ms)[0m COMMIT 
    [1m[33mItem Store (45.9ms)[0m {"id":16} 
Redirected to http://localhost:3000/items/16 
Completed 302 Found in 2153ms (Searchkick: 45.9ms | ActiveRecord: 13.8ms) 


Started GET "/items/16" for 127.0.0.1 at 2015-09-02 15:19:38 -0700 
Processing by ItemsController#show as JSON 
    Parameters: {"id"=>"16"} 
    [1m[36mItem Load (0.4ms)[0m [1mSELECT "items".* FROM "items" WHERE "items"."id" = $1 LIMIT 1[0m [["id", 16]] 
Completed 500 Internal Server Error in 5ms (ActiveRecord: 0.4ms) 

ActionView::MissingTemplate - Missing template items/show, application/show with {:locale=>[:en], :formats=>[:json], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder]}. Searched in: 
    * "/home/user/dummyappone/app/views" 

我怎样才能使它所以我提交表单时,它进入展会页面,仍然允许的显示闪存消息和错误,如果没有保存?

+0

您可以发布您的日志文件,只是片断的地方提交表单后调用'create'? – trh

+0

@trh是的,现在检查编辑。 –

+0

你没有重定向,因为你的响应是在json中(正如你可以从你的日志文件中看到它是在json中处理的,而不是html)。您可以在表单中创建成功的js回调并执行window.location调用。 – trh

回答

2

基于评论:只需添加到您的JS:

dropzone.on("success", function(file, responseText) { 
    window.location.href = ("/items/"+responseText.id) 
}); 

这假定dropzone是你以前的JS初始化的悬浮窗

+0

关于这种方式的事情是关于轨道错误和闪光消息?它似乎是这样的轨道控制器以外,因为我试图一切仍然留在控制器的行动。我应该更具体地说明我想要的东西。这解决了1/3的问题。我真的想在创建资源时模仿rails默认值。 –

+0

那么你会得到一个闪存错误,因为你在控制器中添加了错误。至于其余的,我不明白你需要什么。当你违反惯例时,你可以如何模仿你是有限制的。但是,请更新您的问题或创建一个新的,小心地概述您的需求。祝你好运 – trh