我有這條線在我的票控制器:重定向不工作
before_filter :authenticate
所以,當我投票,而註銷,應該失敗這個過濾器。
在我的應用程序控制器我的身份驗證方法是這樣的:
def authenticate
logged_in? ? true : access_denied
end
所以它返回access_denied
看起來像這樣:
def access_denied
redirect_to login_path, :notice => "You must log in to perform this action." and return false
end
所以,我應該被重定向到我的登錄頁面,向右?
我有這個在我的routes.rb文件:
match '/login' => "sessions#new", :as => "login"
,我有一個new
視圖與登錄表單,我應該被重定向到時候我投票,我沒有登錄我也。在我的票控制器的create
方法驗證碼:
if @vote.save
respond_to do |format|
format.html { redirect_to @video }
format.js
end
else
respond_to do |format|
format.html
end
end
但是,當我投票,我不重定向,並且我得到了我的日誌此錯誤消息:
Started GET "/login" for 127.0.0.1 at Thu Mar 24 21:18:08 -0700 2011
Processing by SessionsController#new as JS
Completed in 17ms
ActionView::MissingTemplate (Missing template sessions/new with {:locale=>[:en, :en], :formats=>[:js, "*/*"], :handlers=>[:rhtml, :rxml, :erb, :builder, :rjs]} in view paths "/rubyprograms/dreamstill/app/views"):
爲什麼會發生這種情況,以及如何才能使此重定向工作?
我已經更新了我的答案和更多的細節以及簡單的重定向解決方案。 – 2011-03-25 01:39:40
爲什麼我需要用於新會話的js文件?我不明白爲什麼我需要它,它應該包含什麼內容......爲什麼當'@ vote.save'失敗時,我不能僅僅使用正常的HTTP請求呢? – 2011-03-25 01:41:02
如果請求是作爲來自瀏覽器的Javascript請求發出的,例如通過AJAX請求發出,那麼您無法用HTML內容響應,因爲瀏覽器不知道如何處理響應。您需要使用Javascript進行響應,如我的示例代碼,可以使用瀏覽器的JavaScript引擎運行。這就是HTTP協議的工作方式。這不是Rails特有的。 – 2011-03-25 01:45:31