【问题标题】:destroy_user_session doesn't work in Devisedestroy_user_session 在设计中不起作用
【发布时间】:2012-02-15 21:52:32
【问题描述】:

我正在使用 rails 3.1.3 并设计 1.5.3,当我将 destroy_user_session_path 添加到我的布局文件时,链接不起作用。我可以正常登录,但是当我单击此路径时出现此错误:

No route matches [GET] "/users/sign_out"

但是,如果我运行 rake 路线,我会看到这条路线:

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

所以这条路线显然使用了 DELETE 动词。我可以通过添加:method => :delete 来获得工作路径,但为什么我必须这样做?路由就在那里,并且已经配置为删除,所以怎么了?

【问题讨论】:

    标签: ruby-on-rails devise httpverbs


    【解决方案1】:

    rake routes 显示您的应用程序将响应哪些路由。确保生成与服务器期望的链接相匹配的链接取决于您。 link_to 不会根据路由检查哪些动词是允许的 - 它希望您提供正确的动词。

    【讨论】:

    • 但是,路由是使用 devise_for :users 设置的,因此将路由定义为使用 DELETE,就像我使用资源 :users 一样,那么为什么设置路由不起作用?我已经看到很多使用不需要提供动词的设计的例子......
    • link_to 隐含的默认动词是GET。因此,如果服务器期待GET,那么您不需要在link_to 中添加显式动词。有时,路由也被配置为匹配任何动词,因此在这些情况下,您也不需要添加显式动词。碰巧的是(正如您在运行 rake routes 时注意到的那样),在这种情况下,路由已由 devise 配置,以便服务器仅匹配 DELETE。因此,您需要link_to 才能使用DELETE 动词。
    • 好的,有道理。感谢您的信息!
    • 代码示例: :delete %>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多