gpt4 book ai didi

ruby-on-rails - 注销时当前用户的模型上的 Ruby 没有方法错误

转载 作者:数据小太阳 更新时间:2023-10-29 08:30:45 25 4
gpt4 key购买 nike

我正在构建一个 Rails 应用程序,其中有很多内容会根据用户是否完成某些测验而发生变化。当用户登录时一切正常,但我只是尝试注销并且我得到了一个 NoMethodError在这行代码上:

<% if current_user.per_quiz.nil? %>

基本上,如果用户已经完成了per_quiz他们转到一个页面(edit View ),如果他们没有转到另一个页面(new View )。唯一改变的是我注销了,所以我只能假设这是导致错误的原因。我是否需要添加某种 if 语句来说明没有用户登录的状态?我应该如何根据 Ruby 最佳实践修复此错误?

最佳答案

您只需要在检查per_quiz 之前检查是否设置了current_user。您可以通过查询 current_user.nil? 在 View 中轻松检查登录状态:

<% if !current_user %>
<p> You must be logged in to do anything useful. Please go login</p>
<% elsif !current_user.per_quiz %>
<p>Cool quiz stuff goes here...</p>
<% else %>

您可能真正想要的是让注销的用户转到其他地方,例如主页或登录页面。为此,您需要对 Controller 做一些简单的事情。我假设该 Controller 名为“QuizzesController”,因为您没有在问题中包含您的 Controller 代码。

方法如下:

class QuizzesController < ApplicationController

# Other devise authentication logic goes here...

before_action :authorize_user!

# Your actions go here...

private

def authorize_user!
if !current_user
redirect_to '/', notice: "You must be logged in to access to this page"
end
end
end

它所做的是安装一个“before_action”处理程序,该处理程序将在让用户在此 Controller 中执行任何操作之前检查用户是否已登录。如果他们没有登录,您可以将他们重定向到任何您想要的地方。

请注意,有时只有特定的操作需要这种处理。在这种情况下,您可以使用 :only:except 选项来指定处理或不处理哪些操作。它看起来像这样:

  before_action :authorize_user!, only: [ :new, :edit, :create ]

或者像这样:

  before_action :authorize_user!, except: :list

这将使您更灵活地管理等式的授权部分,其中设计处理身份验证部分。

关于ruby-on-rails - 注销时当前用户的模型上的 Ruby 没有方法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37083683/

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