Gem devise 的 sign_out 问题

babodx · 2013年02月17日 · 最后由 babodx 回复于 2013年02月21日 · 4419 次阅读

我今天开始尝试使用 devise。 版本是 ruby 1.9.3 rails 3.2.11 devise (2.2.3)

按照http://asciicasts.com/episodes/209-introducing-devise开始试验 已经可以出现http://localhost:3000/users/sign_up的注册页面,并且可以正确登陆上。 但是访问 users/sign_out 总是提示 Routing Error

No route matches [GET] "/users/sign_out" Try running rake routes for more information on available routes.

我在终端也查看了 rake routes

blog rake routes new_user_session GET /users/sign_in(.:format) devise/sessions#new user_session POST /users/sign_in(.:format) devise/sessions#create destroy_user_session DELETE /users/sign_out(.:format) devise/sessions#destroy user_password POST /users/password(.:format) devise/passwords#create new_user_password GET /users/password/new(.:format) devise/passwords#new edit_user_password GET /users/password/edit(.:format) devise/passwords#edit PUT /users/password(.:format) devise/passwords#update cancel_user_registration GET /users/cancel(.:format) devise/registrations#cancel user_registration POST /users(.:format) devise/registrations#create new_user_registration GET /users/sign_up(.:format) devise/registrations#new edit_user_registration GET /users/edit(.:format) devise/registrations#edit PUT /users(.:format) devise/registrations#update DELETE /users(.:format) devise/registrations#destroy

确实存在 users/sign_out 不知道问题出在哪里

路由上写的是 delete,所以你得用 delete,RESTful 的资源有 4 种访问方式,get post delete put

感谢,我也发现问题了。 data-method="delete" 需要添加这个 但是如何写呢? <%= link_to "Sign out", destroy_user_session_path %> 肯定是 get 的。 我看 posts 自己生成的 views,是如下写法 <td><%= link_to 'Destroy', post, method: :delete, data: { confirm: 'Are you sure?' } %></td> 但我写成如下,就报错了。。。

<%= link_to "Sign out", method: :delete, destroy_user_session_path %>

请问该如何加入这个 delete 方法呢?

参数是有顺序的,把 method 写在最后

我也一直想不明这个问题

jquery, jquery_ujs 等文件都导入了 这样写应该也是没问题的 <%= link_to "Sign out",destroy_user_session_path , method: :delete %> 从 Chrome 中也看到链接有 data-method="delete"

但点击 Sign out 后,从 log 看一直是 GET 请求的

无赖只能设置 devise config.sign_out_via = :get

感谢大家,我这里成功了。 就是 HuangYuHei 的方法写的。 在 chrome 里看 html 如下 <a href="/users/sign_out" data-method="delete" rel="nofollow">Sign out</a> 现在申请、登陆、退出都正常了。 接下来是不是可以看看 cancan 了?看看如何弄权限和自定义 devise?

参数顺序的问题可以看下 link_to 的源码,method 应该算 option,一般都放最后,放前面的话会解释成别的东西了

我是个新手,还不知道如何读 rails 源码呢? 是从 githup 上面 clone 一份下来阅读吗?

需要 登录 后方可回复, 如果你还没有账号请 注册新账号