我正在使用Rails 4和Dropzone.js拖放文件并在表单提交时上传它们。我不知道为什么我不能让这个工作,但是我想在表单提交到某个页面之后重定向但是它没有这样做(尽管一切都保存正确)。
这是我的代码:
items / new.html.haml> _form.html.haml
= form_for @item, validate: true,
html: {id: 'item-form', class: 'form-horizontal form', multipart: true} do |f|
= f.text_field :name
%main#image-preview
#dropzone
.fallback
= f.file_field :image, multiple: false
= f.submit 'Done', id: 'item-submit'
items.coffee
Dropzone.autoDiscover = false
if document.getElementById('item-form')
dropzone = new Dropzone('#item-form',
maxFiles: 1
maxFilesize: 1
paramName: 'item[image]'
headers: "X-CSRF-Token" : $('meta[name="csrf-token"]').attr('content')
addRemoveLinks: true
clickable: '#image-preview'
previewsContainer: '#image-preview'
thumbnailWidth: 200
thumbnailHeight: 200
autoProcessQueue: false
uploadMultiple: false)
$('#item-submit').on 'click', (e) ->
e.preventDefault()
e.stopPropagation()
if dropzone.getQueuedFiles().length > 0
dropzone.processQueue()
else
$getScript '/items'
return
items_controller.rb
def continue
@item = Item.find(params[:id])
if @item.user_id == current_user.id
respond_to do |format|
format.html
format.xml
format.json { render :json => {} }
end
end
end
def new
@item = current_user.items.build
end
def create
@item = current_user.items.build(item_params)
respond_to do |format|
if @item.save
format.json { render :json => "window.location = #{post_continue_item_path(@item).to_json}" }
else
format.html { render :new }
format.json { render json: @item.errors, status: :unprocessable_entity }
end
end
end
的routes.rb
resources :items do
get '/post/continue', to: 'items#continue', on: :member
end
日志
Started POST "/items" for 127.0.0.1 at 2015-10-06 12:23:35 -0700
Processing by ItemsController#create as JSON
............
Completed 200 OK in 1786ms (Views: 0.2ms | ActiveRecord: 10.6ms)
不知道该怎么做,所以当它给我一个JSON电话时如何重定向?
答案 0 :(得分:0)
JSON不是Javascript。它旨在传递一些数据,而不是工作代码。使用浏览器的开发人员工具查看回复,您会看到自己的“window.location'脚本很好地包装,基本上无法做任何事情 - 它应该只是一个字符串。
如果你想要一个纯粹的,经典的HTTP重定向,你应该将redirect_to
Rails方法作为唯一的响应,并且在你真正需要重定向时永远不要尝试渲染JSON。