2015-09-02 31 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

相關問題