如何使用 Dropzone.js 和 Rails 4 重定向页面?
how to redirect page on submit with Dropzone.js and Rails 4?
我正在使用 Rails 4,Paperclip and Dropzone.js。我有一个表格,用户可以在其中填写所有内容并可以上传照片,然后提交表格而无需 Dropzone 自动上传。因此,使用以下 js 它将 "put it on hold" 直到我单击提交按钮。
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
我遇到的问题是我可以创建一个新项目并拖放一张照片,但是在我提交表单后,它不会重定向到 items/show,它会保留在同一页面上并且呈现错误:
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" = 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"
我怎样才能做到当我的表单被提交时,它会进入显示页面并且如果没有保存仍然允许显示一个闪现消息和错误?
根据评论:只需将此添加到您的 js 中即可:
dropzone.on("success", function(file, responseText) {
window.location.href = ("/items/"+responseText.id)
});
这里假设dropzone
是你在之前的JS中初始化的dropzone
我正在使用 Rails 4,Paperclip and Dropzone.js。我有一个表格,用户可以在其中填写所有内容并可以上传照片,然后提交表格而无需 Dropzone 自动上传。因此,使用以下 js 它将 "put it on hold" 直到我单击提交按钮。
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
我遇到的问题是我可以创建一个新项目并拖放一张照片,但是在我提交表单后,它不会重定向到 items/show,它会保留在同一页面上并且呈现错误:
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" = 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"
我怎样才能做到当我的表单被提交时,它会进入显示页面并且如果没有保存仍然允许显示一个闪现消息和错误?
根据评论:只需将此添加到您的 js 中即可:
dropzone.on("success", function(file, responseText) {
window.location.href = ("/items/"+responseText.id)
});
这里假设dropzone
是你在之前的JS中初始化的dropzone