2014-09-21 22 views

回答

0

你想從你的客戶端JavaScript發送重定向在location.href像這樣:

$.ajax("/destroy") 
    .done(function() { 
    location.href="/courses"; 
    }); 

我不知道你用什麼庫,供您Ajax調用,所以我只是用jQuery語法。

+0

最清潔的回覆,謝謝 – 2014-09-21 19:40:27

0

首先,您需要將路由更改爲destroy.js而不是銷燬。它會使rails呈現一個js模板而不是html模板。

= link_to 'Destroy', course_path(@course_id), method: :destroy, format: :js 

然後,創建一個destroy.js.erb(或HAML如果這是你使用的是什麼),並添加有JavaScript代碼:

window.location.href = '/courses'; 

你應該考慮爲什麼使用AJAX在所有如果你反正重定向用戶瀏覽器:)

0

響應

底線是,你不能從一個Ajax再重定向任務 - 您必須在響應中容納重定向

Ajax基本上會嚮應用的後端發送「僞請求」。這個請求最好被描述爲相當「愚蠢」 - 它只能直接從初始請求中處理響應(僅此而已);這意味着如果你想處理重定向,你需要在瀏覽器端處理它。

我會看這樣做:

#app/controllers/courses_controller.rb 
class CoursesController < ApplicationController 
    respond_to :js, only: :destroy 

    def destroy 
     @course = Course.find params[:id] 
     @course.destroy 
    end 
end 

#app/views/courses/destroy.js.erb 
window.location.assign("<%=j courses_index_path %>"); 

這將是proessing的「重定向」的最有效途徑。它根本不會是一個重定向 - 只是JS基於特定時間的JS調用重新加載頁面!