没有路由匹配 - 登录尝试后 - 即使路由存在?

时间:2011-01-10 18:52:18

标签: ruby-on-rails routing routes

我正在开发一个rails应用程序,并根据一本书添加了一个简单的登录系统。

我创建了控制器管理员: rails生成控制器管理员登录注销索引

它将以下路线添加到routes.db

  get "admin/login"
  get "admin/logout"
  get "admin/index"
  1. 我可以http://localhost:3000/admin/login完全没问题。
  2. 但是当我尝试登录时,我得到:没有路由匹配“/ admin / login”!
  3. 现在,第一个令人困惑的部分是我的AdminController的“login”方法根本没有执行。

    第二个令人困惑的部分是这个代码就像一个魅力 - 将所有内容重定向到/ admin / login:

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

    图片的标题说明:

    • 我多次重启服务器。
    • 我尝试了不同的浏览器 - 确保没有缓存问题。

2 个答案:

答案 0 :(得分:2)

尝试

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

(注意领先/)

顺便说一句,除非您正在创建登录系统以了解Rails和/或身份验证,否则最好使用Devise这样的东西。

答案 1 :(得分:1)

继David Sulc的回答之后:

您将路由定义为get个请求,这意味着您必须执行GET /admin/login请求,这基本上是您在地址栏中输入网址或按照链接时所发生的情况使用它。

但是,当您尝试在表单中使用这些URL时,表单会执行POST请求,并且因为您已将所有这些定义为get - 仅请求,Rails将无法找到兼容的路线。

我绝对同意David的观点,你应该看看另一个系统,比如Devise。