2011-01-10 54 views
2

我正在開發一個Rails應用程序,並根據一本書添加了一個簡單的登錄系統。沒有路由匹配 - 登錄嘗試後 - 即使路由存在?

我創建的控制器管理: 軌生成控制器管理員登錄註銷指數

它增加了以下路線routes.db

get "admin/login" 
    get "admin/logout" 
    get "admin/index" 
  1. 我能搞到http://localhost:3000/admin/login存在的沒有問題所有。
  2. 但是,當我嘗試登錄時,我得到:沒有路由匹配「/ admin/login」!

現在,第一個令人困惑的部分是我的AdminController的「登錄」方法根本沒有執行。

第二混淆的部分是這個代碼的工作就像一個魅力 - 重定向一切/管理/登入:

def authorize 
    unless User.find_by_id(session[:user_id]) 
     flash[:notice] = "you need to login" 
     redirect_to :controller => 'admin', :action => 'login' 
    end 
    end 

圖片的標題說明:

  • 我重新啓動服務器幾次。
  • 我嘗試了不同的瀏覽器 - 確保沒有緩存問題。
+1

我認爲,當你試圖登錄這是POST請求,而不是GET。顯示您的登錄表格代碼 – fl00r 2011-01-10 19:05:16

回答

2

嘗試

match "/admin/login" => "admin#login" 
match "/admin/logout" => "admin#logout" 
match "/admin/index" => "admin#index" 

(注意前導/)

順便說一句,除非你正在創建一個登錄系統,以瞭解Rails和/或認證,你可能會更好使用類似Devise的東西。

+0

如果我沒有記錯,在Rails路線中,引導斜槓並不重要。不過,使用Devise的建議很有用。 – 2011-01-10 19:28:31

1

從大衛Sulc的回答繼:

你定義的路徑爲get請求,這意味着要到他們,你必須執行GET /admin/login請求,這基本上是當你輸入的URL地址欄中會發生什麼或者按照使用它的鏈接。

然而,當你嘗試的形式使用這些URL,表單做了POST請求,因爲你已經定義了所有這些爲get - 只請求,Rails會無法找到兼容的路線。

我絕對同意大衛你應該看看另一個系統,如Devise。