加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 19:39:33 所属栏目:百科 来源:网络整理
导读:我正在通过一个RoR教程( http://railstutorial.org/chapters/sign-in-sign-out#sec:signin_success是相关部分),这似乎是相当不错的,尽管我在尝试查看示例站点时遇到以下问题. Extracted source (around line #10):7: li%= link_to "Home",root_path %/li8: l
我正在通过一个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

从我的理解,.是一种检查对象是否已定义的方法,因此对象未定义不应该生成错误,而是返回false?我在本教程中搜索了current_user的所有情况(在检查之前是否还有其他人遇到这个问题),我的代码似乎是正确的,所以我有点困惑,如果有人能够帮助我理解Ruby变量的方式应该被访问,为什么我的代码不工作我将不胜感激.

编辑:

我不知道这是否重要,因为我只是开始Rails和Ruby,但是我的用户控制器和视图正在使用帮助器SessionsHelper(它包含在我的应用程序控制器中)

解决方法

我遇到了同样的问题这是出于同样的原因.您忽略了“清单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.

一旦你这样做,错误就被解决了.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读