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

标签 ruby-on-rails variables

我目前正在阅读 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/

相关文章:

javascript - 在双重嵌套 for 循环中组合变量

ruby-on-rails - 新页面时不要中断段落( Prawn )

sql - 在 Rails 中递归获取记录

ruby-on-rails - Mongoid多对多问题

php - 如何从字符串中生成条件语句

android - 存储 Android View 的变量(按钮、TextView 等)

ruby-on-rails - Rails模型无效,但在结果表单中缺少<span class ='error'>

ruby-on-rails - 使用 rspec 进行测试时,将常见的 "test utility methods"放在哪里?

c++ - 没有内部作用域的 if 语句?

javascript - 动态变量增量