2015-02-08 137 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