2012-03-01 76 views
0

我正在使用Rails 3.1.1的Hartl教程书籍,一切工作正常,直到到达第9章并使用布局链接更新_header.html.erb。一旦我对_header.html.erb进行了更改,spec /.../ layout_links rspec返回失败,本地web服务器将返回错误消息而不是网页。问题似乎是sessions_helper.rb中的'用户'。我在下面的代码类型清单书的9.26中:Sessions_Helper Rails 3教程中的用户分配教程Ch.9

<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> 

这可追溯到<%,如果signed_in? %>

我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 

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

回答

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_from_remember_token中,你将会引用类方法,因为在那时你没有用户实例化。

+0

非常感谢。这有效,我完全尴尬,我错过了这么简单的事情,并没有抓住它,因为我正在追查这个问题。 – user1241965 2012-03-01 19:21:00

+0

它发生在每个人身上 - 特别是在像Ruby这样的非强类型语言中 – MunkiPhD 2012-03-02 21:27:50