在RESTFUL身份验证中添加注销按钮

pix*_*ode 8 ruby-on-rails restful-authentication logout

我已经安装了RESTFUL身份验证,一切似乎都运行正常.我可以注册并登录.我可以注销的唯一方法是输入URL http:// localhost:3000/logout

如何在页面上添加注销按钮?我尝试在members.rhtml中添加一个

<%= link_to "logout", :controller=> "sessions", :action=> "destroy" %>
Run Code Online (Sandbox Code Playgroud)

它引用了session_controller.rb,但是我收到错误"没有动作响应显示.动作:创建,销毁和新"

有什么想法吗?感谢名单

Mon*_*ong 8

您在路线文件中有什么?

试试看

map.log_out 'logout', :controller => 'sessions', :action => 'destroy'
Run Code Online (Sandbox Code Playgroud)

在你的路线.

然后就是

<%= link_to "Sign out", log_out_url %>
Run Code Online (Sandbox Code Playgroud)

用于退出链接.

编辑

一切都取决于你如何指定路由.

因为您在路由中有map.log_out,所以此处将获取URL http:// localhost:3000/logout url并将其路由到正确的操作.

如果你有 :

<%= link_to "logout", :controller=> "sessions", :action=> "destroy" %>
Run Code Online (Sandbox Code Playgroud)

这将只为您生成http:// localhost:3000/session的链接.但是,它对路由没有任何作用.您仍然需要指定正确的路线.

请注意,Rails不会将destroy操作附加到url.(它不会创建http:// localhost:3000/session/destroy.)它假定如果你有一个destroy的动作,你将使用DELETE http动词发送它.由于某种原因,它不是很完美,它实际上也没有默认发送DELETE动词.

你可以强迫它这样做:

<%= link_to "logout", {:controller=> "user_sessions", :action=> "destroy"}, :method => :delete%>
Run Code Online (Sandbox Code Playgroud)

除非您也正确地路由它,否则这仍然无效.如果您将以下内容放入路线中:

map.resource :session
Run Code Online (Sandbox Code Playgroud)

然后rails将为所有动词生成路由并指定它们的默认操作,包括DELETE.更多信息可以在这里找到:Rails从外部路由.

整个页面都值得一遍又一遍地阅读,直到你真正理解它为止.路由是理解Rails的关键!

对于像Sessions这样的简单控制器,只需指定log_out路由然后链接到log_out_url就更容易了.

(希望有道理,睡眠剥夺正在蔓延!)