你的路由文件中有什么?
试试看
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 Routing from the Outside In。
整个页面值得一遍又一遍地阅读,直到您真正理解为止。路由是理解 Rails 的关键!
对于像 Sessions 这样的简单控制器,只需指定 log_out 路由,然后链接到 log_out_url..
(希望这是有道理的,睡眠剥夺正在蔓延!)