问题是:简而言之,当我试图安装一个注销链接到我的应用程序时,它无法工作.这里是我能想到的尽可能多的上下文(如果你还想要什么,请戳我)...

我从哈姆的Angular 来看:

= link_to("Logout", destroy_user_session_path, :method => :delete)

它在视图中生成:

<a href="/users/sign_out" data-method="delete" rel="nofollow">Logout</a>

我在我的配置/初始化器/设计中验证了这一点.rb我的设置未注释且正确:

config.sign_out_via = :delete

我验证了以下路由:

destroy_user_session DELETE /users/sign_out(.:format) {:action=>"destroy", :controller=>"devise/sessions"}

我的路由上也有这种诡计.rb,我怀疑这与我的问题有关:

devise_for :users, :controllers => {:sessions => "devise/sessions", :registrations => "users"}
resources :users

最后一点是因为我想在自己的控制器中管理(编辑、创建和删除)用户.

我收到的错误信息如下:

ActiveRecord::RecordNotFound in UsersController#show

Couldn't find User with ID=sign_out
Rails.root: /home/jaydel/projects/mbsquared-projects/Wilson-Goldrick

app/controllers/users_controller.rb:16:in `show'

在我的服务器日志(log)中,我看到以下请求:

Started GET "/users/sign_out" for 127.0.0.1 at 2011-08-04 13:08:51 -0500
  Processing by UsersController#show as HTML
  Parameters: {"id"=>"sign_out"}

有人有什么 idea 吗?

推荐答案

问题在于,在日志(log)中,注销请求是GET请求.

Started GET "/users/sign_out"

但注销路径是删除

destroy_user_session DELETE /users/sign_out(.:format) 

之所以会出现异常,是因为它与resources :users创建的其中一条路径相混淆,这可能类似于

edit_user GET /users/(:id)(.:format) {:action=>"edit", :controller=>"users"}

基本上,"注销"被误认为是一个id.

我不知道为什么删除链接不能作为删除请求通过.虽然改变了

config.sign_out_via = :delete

:get岁或许能解决这个问题.

Ruby-on-rails相关问答推荐

用至少一个缺省值初始化Ruby数组的最简洁方法是什么?

搜查升级到 4.0.0 和 ActionText::RichText

Ruby - 如何删除目录中早于 X 天的所有文件?

Rails 7,Hotwire 动态表单,更新值不起作用

带有块捕获的 FormBuilder 辅助方法在 ERB 中不起作用

您如何查看在 Rails 中触发回调的关联模型?

错误 NoMethodError:ActionView::Base:Class 的未定义方法 `debug_rjs='

骨干model.destroy()即使工作正常也会调用错误回调函数?

rails 3 - link_to 销毁不工作

Rails 3 中图像路径的完整 url

Rails 4,使用 ActiveRecord 的原始查询

如何避免 has_many :through 关系中的重复?

没有要加载的文件 - readline

URL中的Rails点而不是斜杠

减go Ruby 中的日期并以分钟为单位得到差异

Post.all.map(&:id) 是什么意思?

Rails:每个环境的初始化程序?

Ruby 中有与 slice 函数相反的函数吗?

Rails 在 id 字段上重置种子的方法

在 Rails 3 中突出显示当前页面的最佳方法? -- 有条件地将css类应用于链接