Ruby on rails 没有与[GET]匹配的路由/注销“;
在我的会话控制器中,我有一个名为destroy的方法,该方法在路由中指向“Logout”,其功能只是将会话变量重置为nil并重定向到存储索引:Ruby on rails 没有与[GET]匹配的路由/注销“;,ruby-on-rails,ruby,session,httprequest,store,Ruby On Rails,Ruby,Session,Httprequest,Store,在我的会话控制器中,我有一个名为destroy的方法,该方法在路由中指向“Logout”,其功能只是将会话变量重置为nil并重定向到存储索引: def destroy session[:user_id] = nil redirect_to store_url, notice: "Logged out" end 在路由文件中,我声明了指针: get "sessions/destroy" controller :sessions do get 'login' => :new post '
def destroy
session[:user_id] = nil
redirect_to store_url, notice: "Logged out"
end
在路由文件中,我声明了指针:
get "sessions/destroy"
controller :sessions do
get 'login' => :new
post 'login' => :create
delete 'logout' => :destroy
end
现在在浏览器中,我应该触发HTTP DELETE谓词,但是它使用GET,并且找不到路由
例如:
localhost:3000/logout,错误是没有路径匹配[GET]“/logout”您应该在链接中放置显式方法::destroy,如下所示:
= link_to 'Destroy', session, method: :destroy
如果您在
config/initializers/designe.rb
中查看您的designe初始值设定项,并通过第236行搜索并切换到:get
,如果您希望您的用户通过get请求注销
config.sign_out_via = :get
我也犯了同样的错误
这对我有用
刚把路线从
delete 'logout', to: 'sessions#destroy'
#to
get 'logout', to: 'sessions#destroy'
但是要知道,我没有使用任何按钮,我直接在url中编写它,例如:localhost:3000/logout当您在浏览器中键入该按钮时,浏览器将始终假定您使用的是HTTP GET请求。您应该在路由中使用
get'logout'=>:destroy
,以使其正常工作。URL的标准请求是get。。。如果你想更改,你应该再放一个。完成后,通过Get更改动词Delete,简单的错误会使事情变得不可能,多亏了你们两个。我的项目没有designe.rb文件,至少不在该文件夹中