Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用Dropzone.js和Rails 4重定向提交页面?_Javascript_Ruby On Rails_Ruby On Rails 4_Dropzone.js - Fatal编程技术网

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

Javascript 如何使用Dropzone.js和Rails 4重定向提交页面?,javascript,ruby-on-rails,ruby-on-rails-4,dropzone.js,Javascript,Ruby On Rails,Ruby On Rails 4,Dropzone.js,我使用的是Rails 4,带有和。我有一个表单,用户可以填写所有内容并上传照片,然后提交表单,而无需Dropzone自动上传。因此,对于下面的js,它将“暂停”,直到我单击submit按钮 items/_form.html.erb 路线 项目控制器 我遇到的问题是,我可以创建一个新项目并拖放一张照片,但在我提交表单后,它将保留在同一页面上,而不是重定向到项目/显示,并呈现错误: 编辑 当我的表单提交后,它会进入显示页面,如果未保存,仍然允许显示flash消息和错误,我如何才能做到这一点?基于评论

我使用的是Rails 4,带有和。我有一个表单,用户可以填写所有内容并上传照片,然后提交表单,而无需Dropzone自动上传。因此,对于下面的js,它将“暂停”,直到我单击submit按钮

items/_form.html.erb

路线

项目控制器

我遇到的问题是,我可以创建一个新项目并拖放一张照片,但在我提交表单后,它将保留在同一页面上,而不是重定向到项目/显示,并呈现错误:

编辑


当我的表单提交后,它会进入显示页面,如果未保存,仍然允许显示flash消息和错误,我如何才能做到这一点?

基于评论:只需将此添加到您的js:

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

这假设
dropzone
是您在以前的JS中初始化的dropzone

您可以发布日志文件吗,只是提交表单后调用
create
的片段?@trh是的,现在检查编辑。您没有重定向,因为您的响应是json(正如您从日志文件中看到的,它是用json而不是html处理的)。您可以在表单中创建一个success js回调,然后执行window.location调用。@trh不太确定这是如何完成的。不过,谢谢。这种方式的问题是rails错误和一条flash消息如何处理?这似乎超出了rails控制器的范围,因为我正在尝试一切,以保持控制器的操作。我应该这样做更具体地说我想要什么。这解决了问题的1/3。我真的试图在创建资源时模仿rails默认值。你会得到一个flash错误,因为你在控制器中添加了错误。至于其余的,我不明白你需要什么。当你打破惯例时,你可以模仿的程度是有限的。但请更新你的问题,或创建一个新的问题,仔细地概述你需要什么。祝你好运
$(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();
    }
  );

});
resources :items
  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
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"
dropzone.on("success", function(file, responseText) {
  window.location.href = ("/items/"+responseText.id)
});