javascript - 如何使用 Dropzone.js 和 Rails 4 重定向提交页面?

标签 javascript ruby-on-rails ruby-on-rails-4 dropzone.js

我正在使用 Rails 4,PaperclipDropzone.js .我有一个表格,用户可以在其中填写所有内容并可以上传照片,然后提交表格而无需 Dropzone 自动上传。因此,使用以下 js 它将“搁置”,直到我单击提交按钮。

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"

我怎样才能在提交表单时进入显示页面,并且如果未保存,仍然允许显示闪现消息和错误消息?

最佳答案

根据评论:只需将此添加到您的 js 中:

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

这里假设 dropzone 是你在之前的 JS 中初始化的 dropzone

关于javascript - 如何使用 Dropzone.js 和 Rails 4 重定向提交页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32364144/

相关文章:

javascript - 使用 LocalStorage 记住复选框的状态和文本区域的值

javascript - 在 else block 内有一个 if - else block 是最佳实践吗

ruby-on-rails - 选择 rails 中具有最大列值的行

ruby-on-rails - 在 rails 3 和 rails 4.1 之间共享 cookie

javascript - 类似 iOS 的半透明模态,模糊其背后的背景

javascript - 如何使 PDF 表格的数据表宽度为 100%

ruby-on-rails - 跨越表的边界 : language role

ruby-on-rails - 无需服务器端访问的 Gitlab LDAP(Active Directory)身份验证

ruby-on-rails - Tire Gem 返回 'Can' t 对每个文档有多个值或每个字段有多个标记的字符串类型进行排序

ruby-on-rails - 测试嵌套列表是否符合预期的最佳方法是什么?