gpt4 book ai didi

ruby-on-rails - 未定义的局部变量或方法 'current_user'

转载 作者:行者123 更新时间:2023-12-04 00:55:16 37 4
gpt4 key购买 nike

我目前正在阅读 RoR 教程(http://railstutorial.org/chapters/sign-in-sign-out#sec:signin_success 是相关部分),这似乎相当不错,尽管我在尝试查看示例站点时遇到了以下问题。

Extracted source (around line #10):

7: <li><%= link_to "Home", root_path %></li>
8: <li><%= link_to "About", about_path %></li>
9:
10: <% if signed_in? %>
11: <li><%= link_to "Profile", current_user %></li>
12: <li><%= link_to "Sign out", signout_path, :method => delete %></li>
13: <% else %>

如您所见,问题源于我的方法“signed_in?”它应该通过检查是否设置了 current_user 变量来检查用户是否已登录(我已经包含了助手中的其余代码以提供上下文,抱歉):
module SessionsHelper

def sign_in(user)
cookies.permanent.signed[:remember_token] = [user.id, user.salt]
current_user = user
end

def sign_out
cookies.delete[:remember_token]
current_user = nil
end

def current_user= (user)
@current_user ||= user_from_remember_token
end

def signed_in?
!current_user.nil?
end

private

def user_from_remember_token
User.authenticate_with_salt(*remember_token)
end

def remember_token
cookies.signed[:remember_token] || [nil, nil]
end

end

根据我的理解,.nil?是一种检查对象是否已定义的方法,因此 undefined object 不应产生错误而是返回false?我在教程中搜索了 current_user 的所有案例(在检查其他人是否有这个问题但收效甚微之前),我的代码似乎是正确的,所以我有点困惑,如果有人能够帮助我理解 Ruby 变量的方式应该被访问以及为什么我的代码不起作用我会非常感激。

编辑:

我不确定范围是否重要,因为我刚刚开始使用 Rails 和 Ruby,但是我的用户 Controller 和 View 正在使用助手 SessionsHelper(它包含在我的应用程序 Controller 中)

最佳答案

我遇到了同样的问题,出于同样的原因。您忽略了“ list 9.16”中的部分说明。

def current_user= (user)
@current_user ||= user_from_remember_token
end

您应该将其更改为以下内容。
def current_user
@current_user ||= user_from_remember_token
end

您还需要将 *self.*current_user 的所有实例更改为 *@*current_user。

执行此操作后,错误将得到解决。

关于ruby-on-rails - 未定义的局部变量或方法 'current_user',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4172901/

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