我正在开发一个rails应用程序,并根据一本书添加了一个简单的登录系统。
我创建了控制器管理员: rails生成控制器管理员登录注销索引
它将以下路线添加到routes.db
get "admin/login"
get "admin/logout"
get "admin/index"
现在,第一个令人困惑的部分是我的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
图片的标题说明:
答案 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。