使用Postgres的Rails错误(无法找到具有'id'= logout的用户)

时间:2015-03-14 21:52:12

标签: ruby-on-rails postgresql webrick

有什么可能的解决方案(无法找到用户' id' =注销)?我很感激任何意见。我能找到的只是对bug的引用。提前谢谢。

ActiveRecord::RecordNotFound (Couldn't find User with 'id'=logout):
  app/controllers/users_controller.rb:16:in `show'

users_controller.rb

line 15: def show
line 16:   @user = User.find(params[:id])
line 17: end

routes.rb

delete 'logout' => 'sessions#destroy'

视图/布局/ application.html.erb

          <% if logged_in? %>
            <li><%= link_to current_user.name, current_user %></li>
            <li><%= link_to "Log out", logout_path, method: :delete %></li>
          <% else %>
            <li><%= link_to "Log in", login_path %></li>
          <% end %>

2 个答案:

答案 0 :(得分:0)

因此,您点击logout_path生成的网址(/logout?),而不是转到您的sessions#destroy操作,它会转到您的users#show行动,失败,因为您的操作在"logout"

中被赋予字符串params[:id]

这可能是由routes.rb文件中较早的另一条路线引起的,该路线会影响您在问题中显示的路线。例如。你可能会有这样的事情:

resources :users, path: '/'

...或者您可能拥有普通的用户资源,但是您的delete行嵌套在用户名称空间或其他内容中:

resources :users

# then lower in your file something like...
namespace :users do
  delete 'logout' => 'sessions#destroy'
end

更新

这些都不会导致你所看到的内容,所以如果上述内容没有指出正确的方向,那么请在问题中添加完整的config/routes.rb文件和/或{的输出{1}}

答案 1 :(得分:0)

由于某种原因,Firefox在点击注销时没有发送http删除请求,而是一个get,所以不得不在routes.rb中添加一行来处理http get log for logout。特别感谢约翰!