gpt4 book ai didi

ruby-on-rails - session #destroy 未被应用

转载 作者:太空宇宙 更新时间:2023-11-03 18:03:02 25 4
gpt4 key购买 nike

首先我想说我没有使用设计。我的问题是我正在将身份验证作为我网站的一部分,但我遇到了路由错误。

我尝试过很多堆栈溢出解决方案,但似乎对我不起作用。

这是我的 new.html.erb 页面,我试图在其中销毁用户:

<h1> Hey, <%= @user.firstname %>! </h1>
<h3><a href="http://localhost:3000">Home</a></h3>
<%= link_to "Log Out", session_path, method: :delete %>
<%= stylesheet_link_tag 'users', media: 'all', 'data-turbolinks-track' => true %>

这是我的routes.rb 文件:

Rails.application.routes.draw do
# Fubyonrails.org/routing.html
root :to => 'static#welcome'
resources :users, only: [:new, :create, :show]
resources :sessions, only: [:new, :create, :destroy]
resources :studios
end

这是我的 session_controller.rb 文件:

class SessionsController < ApplicationController
def new; end

def create
@user = User.find_by(username: params[:username])
if @user&.authenticate(params[:password])
session[:id] = @user.id
redirect_to @user
else
render new_user_path
end
end

def destroy
raise params.inspect
session.delete(:id)
redirect_to root_url
end
end

最佳答案

默认情况下,当使用 resources :sessions, only: [:new, :create, :destroy] 时,它会创建像 DELETE/sessions/:id 和触发 Controller 的 destroy 操作。

在这里,在你的 html 中

<%= link_to "Log Out", session_path, method: :delete %>

这不会为 Rails 路由器生成正确的 url 来触发您想要的操作(因为您没有传递任何由路由定义的 params[:id])

你可以像这样更新你的routes.rb

resources :sessions, only: [:new, :create]

delete '/users/session', to: "sessions#destroy", as: :sign_out

然后,在你看来

<%= link_to "Log Out", sign_out_path, method: :delete %>

关于ruby-on-rails - session #destroy 未被应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57686959/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com