2012-02-21 107 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 
相关问题