有时当我退出时,我收到此错误。它只发生在DEV中。我怀疑它可能与Turbolinks有关,但我不确定。
Started GET "/users/logout" for 127.0.0.1 at 2014-03-11 20:08:31 -0400
Processing by UsersController#show as HTML
Parameters: {"id"=>"logout"}
User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1 [["id", "logout"]]
Completed 404 Not Found in 2ms
ActiveRecord::RecordNotFound (Couldn't find User with id=logout):
app/controllers/users_controller.rb:11:in `show'
我甚至没有这条路的GET路线。它应该给我一个路线错误。
resources :users do
collection do
get 'login', to: :login
post 'login', to: :loginCreate
post 'logout', to: :logout
rake routes
logout_users POST /users/logout(.:format) users#logout
Haml的
.button=link_to 'Logout', logout_users_path, method: 'post'
重装时问题就消失了。 JS已启用。
Ruby 2.0.0,Rails 4.0.3。
答案 0 :(得分:1)
我认为很可能是/ users /:id的路由,这就是它输出" logout"作为GET请求时的id参数:
参数:{" id" =>"退出"}
至于为什么你的链接是GET而不是POST,我对HAML并不熟悉。从您的代码示例看起来它试图将链接指定为POST?如果是这样,我之前从未见过锚标记。
答案 1 :(得分:1)
您应该将注销/登录逻辑移动到不同的控制器,即sessions_controller,然后进行会话/登录会话/注销,而不是将这些操作嵌套在用户操作中。
因为你的路由文件与用户/注销匹配,用id = logout来更新用户/:id,这就是你看到错误的原因。
答案 2 :(得分:1)
问题是您是否正在调用resources :users
creates the show
这样记录:
/users/:id
因为在之前正在创建其他路由,所以Rails会先处理它,因此如果你发送/logout
它就会感到困惑。立即修复(使用scope):
#config/routes.rb
scope "/users" do
get 'login', to: "users#login"
post 'login', to: "users#loginCreate"
post 'logout', to: "users#logout"
end
resources :users
我还建议使用Marc在他的回答中提到的SessionsController
方法。 Devise&其他身份验证系统使用此