我使用的是 Rails 7,当我单击注销时,它显示一条错误,指出未找到注销路径。 这是我的routes.rb、会话控制器和注销标头部分的代码:
Rails.application.routes.draw do
# Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html
# Defines the root path route ("/")
root 'pages#home'
get 'about', to: 'pages#about'
resources :articles
get "/signup", to: "users#new"
resources :users, except: [:new]
get "/login", to: "sessions#new"
post "/login", to: "sessions#create"
delete '/logout', to: 'sessions#destroy'
end
<li class="nav-item">
<%= link_to "Log out", logout_path, method: :delete, class: "nav-link" %>
</li>
def destroy
session[:user_id] = nil
flash[:notice] = "Logged out"
redirect_to root_path
end
您的链接正在发送 GET 请求,但它应该是 DELETE。这是因为 Rails 7 默认带有 Turbo。尝试:
<%= link_to "Log out", logout_path, data: {turbo_method: :delete} %>
button_to
而不是 link_to
。这将创建一个实际的表单元素,而不是依赖 JavaScript。
<%= button_to "Log out",
logout_path,
method: :delete,
class: "nav-link" %>
如果您出于某种原因实际上需要一个发送非 GET 请求的链接,那么 Turbo 会将其事件处理程序附加到
data-turbo-method
,而不是 Rails UJS 使用的 data-method
:
<%= link_to "Log out",
logout_path,
data: { turbo_method: :delete },
class: "nav-link" %>