我正在按照 Michael Hartl 的 Rails 教程構建一個小型演示應用程式。我被困在注銷中。這是我的路線.rb:
Rails.application.routes.draw do
resources :users
get "/login", to: "sessions#new"
post "/login", to: "sessions#create"
delete "/logout", to: "sessions#destroy"
# Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html
# Defines the root path route ("/")
root 'users#index'
end
這是相關的控制器操作:
def destroy
log_out
redirect_to root_url, status: :see_other
end
這是定義 log_out 的會話助手:
def log_out
reset_session
@current_user = nil
end
這是視圖中的鏈接標簽:
<%= link_to "Log out", logout_path, data: { 'turbo-method': :delete } %></span>
錯誤截圖
當我單擊注銷鏈接時,我收到此錯誤。預期行為:注銷用戶,重定向到登錄螢屏。
我究竟做錯了什么?
我不知道是不是因為 Turbo,或者 Turbo 是否安裝正確。我已將 gem 'turbo-rails' 添加到 Gemfile 并在之后運行 bundle 沒有任何效果。
uj5u.com熱心網友回復:
對我來說,添加方法: :delete 與 data-turbo 一起作業。
<span>
<%= link_to "Log out", destroy_user_session_path,method: :delete, data: { 'turbo-method': :delete } %></span>
uj5u.com熱心網友回復:
用傳遞方法檢查
<%= link_to "注銷", logout_path, 方法: :delete, data: { 'turbo-method': :delete } %>
或者
<%= link_to "注銷", logout_path, 方法: :delete %>
uj5u.com熱心網友回復:
您正在通過 GET 訪問 DELETE 方法路由。你跑了嗎
rails turbo:install
您可能希望通過 GET 而不是 config/devise.rb 中的 Delete 來更改注銷
# The default HTTP method used to sign out a resource. Default is :delete.
config.sign_out_via = :get # <= change this from :delete to :get and remove the `method:` in your `link_to` helper
以下是參考資料: https ://github.com/hotwired/turbo-rails https://github.com/heartcombo/devise/issues/5439
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/507556.html