重定向然后渲染

时间:2015-02-08 12:34:41

标签: ruby-on-rails

好的,非常快,我正在使用文件上传插件http://plugins.krajee.com/file-input来上传我的图片。该插件需要服务器的某种响应,我想发回一个空的json对象。

但是当图片上传时,我还需要立即重定向到另一个地方,以便人们可以对订单进行更改。

Rails说我不能使用渲染和重定向,但是说我可以重定向并返回。 我如何重定向并返回空的json对象?

 def create
if !params[:images].nil? 
  package = Package.first 
  @photos = Array.new   
  @order = current_user.orders.new 
  @order.save  

  @order.order_items.each{|d| d.delete} #Stupid hack to prevent creation of fake order items. Don't know what is causing this yet

  params["images"].each do |i|  
    photo = current_user.photos.create  
    photo.write(i.original_filename,  i.read)
    photo.save
    @order.order_items.create(photo_id: photo.id, size_id: package.size_id, material_id: package.material_id)

  end
  redirect_to edit_order_path(@order) and return


else
  flash[:danger] = "Please select at least one photo to upload"
  redirect_to upload_photos_path
end 

1 个答案:

答案 0 :(得分:0)

如果您正在使用的上传插件需要JSON响应并且您希望在成功上传后重定向,那么您需要在客户端进行此操作。

如果您不使用Rails 4或Turbolinks,只需通过window.location.replace重定向即可。从您的Rails代码看起来您​​是批量上传,在这种情况下,您需要根据the docs

filebatchuploadsuccess事件分配回调

示例:

$('#fileinputid').on('filebatchuploadsuccess', function(event, data, previewId, index) {
    // files have been successfully uploaded, redirect
    window.location.replace( '/your_path_here' );
});

如果您使用的是Turbolinks,则上述代码将完全相同,只是代替window.location.replace,您可以使用Turbolinks.visit

示例:

$('#fileinputid').on('filebatchuploadsuccess', function(event, data, previewId, index) {
    // files have been successfully uploaded, redirect
    Turbolinks.visit( '/your_path_here' );
});