ruby-on-rails 如何在rails中注销路径?

nwnhqdif  于 2023-10-21  发布在  Ruby
关注(0)|答案(2)|浏览(136)

我正在使用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

nwlqm0z1

nwlqm0z11#

您的链接正在发送一个GET请求,但它应该是一个GET请求。这是因为Rails 7默认带有Turbo。试试看:

<%= link_to "Log out", logout_path, data: {turbo_method: :delete} %>
7fyelxc5

7fyelxc52#

使用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" %>

您现在需要这样做的唯一真实的原因是,如果您想在执行非GET请求的表单元素中添加链接。这是因为HTML中不允许嵌套表单。
请注意,为了使其工作,Turbo必须出现在页面上并工作,这可能会因多种原因而失败,具体取决于您的应用程序中的资产管道。

相关问题