2015-02-08 142 views
0

好吧,真快,我使用文件上传插件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 

+0

当文档/错误消息显示“重定向并返回”时,它们仅表示从当前方法返回 - 浏览器收到的唯一响应是重定向。你可能需要一些客户端代码来做重定向。 – 2015-02-08 15:02:36

+0

啊,我以为回报就像php返回..事情是,我是一个PHP开发人员,我只是站在帮助RoR代码的人。但是,让我看看我能在客户端做什么重定向 – 2015-02-08 15:37:47

回答

0

如果上传你用期待的JSON响应,你想上传成功后重定向插件,那么你需要做的客户端。

如果你不使用Rails 4或Turbolinks,你可以简单地通过window.location.replace重定向。从您的Rails代码,它看起来像你批量上传在这种情况下,你要回调分配给filebatchuploadsuccess事件按the docs

例子:

$('#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'); 
}); 
+0

这应该工作...问题是,我想重定向用户到期望订单ID作为参数的页面...现在,因为我做渲染像render:json => @order,我如何访问那个json对象,所以我可以然后去头并将它们重定向到页面?我认为这将是数据,但它不在那里。 – 2015-02-08 18:55:02

+0

我已经想通了......我不得不访问data.response.id。谢谢 – 2015-02-08 19:38:07

+0

如果能帮助你解决原始问题,你能接受我的答案吗?谢谢。 – 2015-02-08 23:50:45