【发布时间】:2014-08-29 13:19:57
【问题描述】:
我不确定我做错了什么:在我的会话控制器上,我有以下内容:
def destroy
sign_out
redirect_to root_url
end
在我的路线上,我有以下内容:
match '/signout', to: 'sessions#destroy', via: 'delete'
在链接上退出:
<%= link_to content_tag(:span, 'Sign out'), signout_path, method: 'delete' %>
但我得到signout_path 错误[GET] 的无路由匹配。如果我理解正确,问题是没有为GET 定义路由,这是正确的。
我无法理解的是为什么使用GET is 方法而不是根据链接删除。
有什么想法吗?
编辑:我的整个路线文件:
EDIT2:我的会话控制器的内容:
class SessionsController < ApplicationController
def new
end
def create
...
end
def destroy
sign_out
redirect_to root_url
end
end
路线:
Rails.application.routes.draw do
resources :users
resources :sessions, only: [:new, :create, :destroy]
resources :categories
resources :admin
get 'users/new'
root 'static_pages#home'
match '/signup', to: 'users#new', via: 'get'
match '/signin', to: 'sessions#new', via: 'get'
match '/signout', to: 'sessions#destroy', via: 'delete', as: 'signout'
match '/help', to: 'static_pages#help', via: 'get'
match '/contact', to: 'static_pages#contact', via: 'get'
match '/admin', to: 'admin#index', via: 'get'
end
【问题讨论】:
-
如果您向我们展示了您的
sign_out方法的内容,这将有助于更好地理解您的问题。此外,您没有指定导致上述错误的操作。当您单击“退出”链接时会发生这种情况,对吗?DELETE需要启用 JavaScript。 -
@jibiel 上面的销毁方法(消息中的第一块代码)。 JS 已启用。我需要添加特定的 js 文件吗? (我是 Rails 新手)
-
您从
SessionsController#destroy方法调用sign_out方法。如果您知道自己在做什么,我假设sign_out位于ApplicationController。 -
你用的是什么浏览器?你能验证link_to帮助器生成的html是否使用了delete方法(应该有一些额外的html和一些ujs ids设置一些内部rails参数,以便调用被解释为DELETE)
-
@jibiel 老实说,我不知道自己在做什么。我想我正在调用驻留在会话控制器中的销毁方法。我认为没关系,因为我在链接中指定了控制器和方法。显然它不好,但我不知道如何解决它。
标签: ruby-on-rails ruby-on-rails-4 routes