2012-02-21 112 views
0

我是Ruby on Rails的超級新手,我試圖使用Authlogic製作一個身份驗證系統(在此之後tutorial)。那我得到錯誤之後我提交登錄表單:ActionController :: RoutingError(沒有路由匹配「/ user_sessions/......)

No route matches "/user_sessions/%23%3CUserSession:0x103486aa8%3E" 

令人驚訝的形式提交後右邊的頁面也帶來了錯誤的網址是:

http://localhost:3000/user_sessions/%23%3CUserSession:0x103486aa8%3E 

我不知道我做錯了什麼,以及那個奇怪的UserSession代碼是從哪裏來的!

這是我的登錄表單看起來像:

<% form_for @user_session do |f| %> 
    <%= f.error_messages %> 
    <p> 
    <%= f.label :username %><br /> 
    <%= f.text_field :username%> 
    </p> 
    <p> 
    <%= f.label :password %><br /> 
    <%= f.password_field :password %> 
    </p> 
    <p><%= f.submit "Submit" %></p> 
<% end %> 

這裏是我UserSession類:

class UserSession < Authlogic::Session::Base 
    def to_key 
    new_record? ? nil : [ self.send(self.class.primary_key) ] 
    end 
end 

創建我UserSessionController行動:

def create 
    @user_session = UserSession.new(params[:user_session]) 
    if @user_session.save 
     flash[:notice] = "Login successful!" 
     redirect_back_or_default root_path 
    else 
     render :action => :new 
    end 
    end 

「redirect_ba在ApplicationController中 ck_or_default」的方法:

def redirect_back_or_default(default) 
    redirect_to(session[:return_to] || default) 
    session[:return_to] = nil 
end 

最後一點有關的一切user_sessions在routes.rb中

resources :user_sessions 

match 'login' => "user_sessions#destroy", :as => :login 
match 'logout' => "user_sessions#destroy", :as => :logout 

這些都是思想可以參與獲得該代碼錯誤。如果我應該添加更多代碼以使其更清楚,請告訴我。

+0

向我們展示您的UserSession類。有些東西是錯誤的,它並沒有正確地調用to_param。 – DGM 2012-02-21 18:52:02

+0

我將UserSession類添加到帖子中。 – soroush 2012-02-21 19:17:46

+0

好的,你爲什麼設置to_key?你想達到什麼目的?啊,教程...它已經過時了,你不需要這個功能... – DGM 2012-02-21 19:25:32

回答

1

好吧,首先,你有一個壞的路徑:的

match '/login', :to => 'user_sessions#new', :as => 'login' 

注意new代替destroy

也,是不是需要在以後的版本中TO_KEY - 我使用的是軌道3和唐沒有在我的UserSession模型中。

+0

謝謝。你是對的。不需要to_key功能。但我也必須更新我的Gemfile並將「gem'authlogic'」更改爲「gem'authlogic',::git =>'git://github.com/odorcicd/authlogic.git',:branch =>'rails3 '「然後」捆綁安裝「。我的路線在我的原始代碼中確實很好,只是在帖子中只有一個錯字。謝啦。 – soroush 2012-02-22 07:58:16

+0

呵呵。我甚至不需要在我的gemfile中指定git repo ... – DGM 2012-02-22 16:28:38

0

絕對需要改變你的路線不匹配登錄摧毀。 下面是我的路由設置...(摘自「使用Rails進行敏捷Web開發」示例)。

controller :user_sessions do 

    get 'login' => :new 
    post 'login' => :create 
    delete 'logout' => :destroy 
end 
相關問題