Sessions_Helper Rails中的用户分配3教程Ch.9

时间:2012-03-01 18:53:47

标签: ruby-on-rails railstutorial.org

我正在使用Rails 3.1.1编写Hartl的教程,一切正常,直到达到第9章并使用布局链接更新_header.html.erb。一旦我对_header.html.erb进行了更改,并且spec /.../ layout_links rspec返回失败,本地Web服务器返回错误消息而不是网页。问题似乎是'用户'在sessions_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>

追溯到&lt;%if signed_in? %GT;

我的sessions_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

有人能指出我正确的方向来解决这个问题吗?

1 个答案:

答案 0 :(得分: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中,您将引用类方法,因为此时没有用户实例化。