您的路线文件中有什么?
试着放
map.log_out 'logout', :controller => 'sessions', :action => 'destroy'
在您的路线中。
然后就拥有
<%= link_to "Sign out", log_out_url %>
退出链接。
编辑
这完全取决于您如何指定路由。
因为您在路由中有 map.log_out,所以 url http://localhost:3000/logout url 会被它拾取并路由到正确的操作。
如果你有 :
<%= link_to "logout", :controller=> "sessions", :action=> "destroy" %>
这只会为您生成http://localhost:3000/session的链接。但是,它对路由没有任何作用。您仍然需要指定正确的路线。
请注意,Rails 不会将销毁操作附加到 url。(它不会创建http://localhost:3000/session/destroy。)它假设如果您有一个破坏动作,您将使用 DELETE http 动词发送它。出于某种原因,它不是很完美,它实际上也不默认发送 DELETE 动词。
您可以强制它这样做:
<%= link_to "logout", {:controller=> "user_sessions", :action=> "destroy"}, :method => :delete%>
除非您也正确路由它,否则这仍然不起作用。如果您将以下内容放入路线中:
map.resource :session
然后 rails 将为所有动词生成路由,并为它们指定默认操作,包括 DELETE。更多信息可以在这里找到:Rails 从外到内的路由。
整个页面值得一遍又一遍地阅读,直到您真正理解为止。路由是理解 Rails 的关键!
对于像 Sessions 这样的简单控制器,只需指定 log_out 路由然后链接到 log_out_url 就更容易了。
(希望这是有道理的,睡眠剥夺正在蔓延!)