现在我的注销链接的路由指向sessions#destroy,但它不是HTTP删除动词,所以它不起作用。这个问题让我很沮丧,因为我应该能自己弄清楚,但到目前为止我还没有运气。以下是我在尝试注销时收到的错误消息:
没有与[DELETE]“/logout”匹配的路由
下面是我的routes文件:
Rails.application.routes.draw do
get 'line_items/create'
root 'static_pages#home'
get 'testimonials' => 'static_pages#testimonials'
get 'help' => 'static_pages#help'
get 'about' => 'static_pages#about'
get 'contact' => 'static_pages#contact'
get 'signup' => 'users#new'
get 'login' => 'sessions#new'
get 'logout' => 'sessions#destroy'
resources :users
resources :sessions, only: [:new, :create, :destroy]
resources :products
resources :categories
resources :line_items
resources :carts
end
sessions控制器中的destroy方法:
def destroy
forget(current_user)
session.delete(:user_id)
@current_user = nil
redirect_to root_url
end
注销链接:
<li>
<%= link_to "Log out", logout_path, method: "delete" %>
</li>
耙式路由相关结果:
logout_path GET /logout(.:format) sessions#destroy
users_path GET /users(.:format) users#index
POST /users(.:format) users#create
new_user_path GET /users/new(.:format) users#new
edit_user_path GET /users/:id/edit(.:format) users#edit
user_path GET /users/:id(.:format) users#show
PATCH /users/:id(.:format) users#update
PUT /users/:id(.:format) users#update
DELETE /users/:id(.:format) users#destroy
sessions_path POST /sessions(.:format) sessions#create
new_session_path GET /sessions/new(.:format) sessions#new
session_path DELETE /sessions/:id(.:format) sessions#destroy
谢谢你的帮助
5条答案
按热度按时间iovurdzv1#
您有两个选择:
1.更改链接以使用定义的路径
或
请注意,为了使最后一个链接工作,您需要将其更改为单个资源(资源,而不是资源)。
1.更改路线从
到
在任何情况下,会话上的复数
resources
都没有意义。b1uwtaje2#
将
match '/logout', to: 'session#destroy', via: 'delete'
添加到routes.rb文件中执行
rake routes
检查应用程序支持的路由。oyxsuwqo3#
在routes.rb文件中,将注销的 predicate 设置为get:
您需要将其设置为删除:
s4chpxco4#
从Rails 7(至少)开始,可以创建一个链接,在单击时使用DELETE方法执行请求。
将属性
data-turbo-method='delete'
添加到链接。例如:
taor4pac5#
从Rails 7开始,您可能需要做类似的事情
<%= link_to "logout", destroy_user_session_path, data: { turbo_method: :delete" } %>