0

我正在使用 Rails 3.1.1 完成 Hartl 的教程书,一切正常,直到第 9 章并使用布局链接更新 _header.html.erb。一旦我对 _header.html.erb 和 spec/.../layout_links 进行更改,rspec 就会返回失败,并且本地网络服务器会返回错误消息而不是网页。问题似乎是 session_helper.rb 中的“用户”。我在本书的清单 9.26 中输入了以下代码:

<header>
    <%= link_to logo, root_path %>

    <nav class="round">
      <ul>
        <li><%= link_to "Home", root_path %></li>
        <li><%= link_to "Help", help_path %></li>
        <% if signed_in? %>
            <li><%= link_to "Sign out", signout_path, :method => :delete %></li>
            <% else %>
            <li><%= link_to "Sign in", signin_path %></li>
            <% end %>
      </ul>
    </nav>
  </header>

执行此操作后,尝试在本地服务器上显示时收到错误消息:

undefined local variable or method `user' for #<#<Class:0x4f4b1d0>:0x4f3a370>

哪个可以追溯到 <% if signed_in? %>

我的 session_helper 文件是:

module SessionsHelper

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

  def current_user
    @current_user ||= user_from_remember_token
  end

  def signed_in?
    !current_user.nil?
  end

  def sign_out
    cookies.delete(:remember_token)
    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

有人可以指出我解决问题的正确方向吗?

4

1 回答 1

2

我相信你的

def user_from_remember_token
    user.authenticate_with_salt(*remember_token)
end

应该是:(用户应该大写)

def user_from_remember_token
    User.authenticate_with_salt(*remember_token)
end

我假设您的 User 类中有身份验证代码。在 user_from_remember_token 中,您将引用类方法,因为此时您没有 User 实例化。

于 2012-03-01T18:57:18.483 回答