新手问题 NameError (uninitialized constant SessionsHelper::Users)

gechentuo · 2013年09月03日 · 最后由 jhunter 回复于 2014年06月03日 · 3281 次阅读

这两个模块是用来处理用户登录的信息存储,代码是参考 rubyonrailstoturial 第 8 章的内容。不知道为什么当程序运行到 SessionHelper 中的 sign_in 方法的时候, user.update_attributes(...)这句总是提示 NameError (uninitializedconstant SessionsHelper::Users)错误,求教!

class SessionsController < ApplicationController
   def new                                  
   end                                                                   

  def create                                                            
   user = User.find_by(email: params[:session][:email].downcase)       
    if user && user.authenticate(params[:session][:password])           
     sign_in  user                                                      
    redirect_to user                                                  
   else                        
    flash.now[:error] = 'Invalid email/password combination' #Not quite right!
     render 'new'                                                       
    end 
  end                                                                   

  def destroy                                                           
  end 

 end   
module SessionsHelper
     def sign_in(user)
      remember_token = User.new_remember_token
      cookies.permanent[:remember_token] = remember_token
      self.current_user = user
    user.update_attribute(:remember_token, Users.encrypt(remember_token)) 
      end

    def signed_in?
     !current_user.nil?
    end

    def current_user=(user)
      @current_user = user
    end

    def current_user
      remember_token = User.encrypt(cookies[:remember_token])
      @current_user ||= User.find_by(remember_token: remember_token)
    end
  end

如何插入代码 http://ruby-china.org/topics/13152 先描述你的问题,然后描述你不明白的地方,在 title 上写错误信息,内容里面贴代码,这样是很难得到帮助的。

#1 楼 @lgn21st 嗯,谢谢了。我这就改

#3 楼 @gechentuo 很好,可读性增加了 10 倍,如果你能上传个头像并完善你的个人 Profle 就更好了,如果你能积极发优秀的问题出来,那么将来你将成长为社区大牛。

user.update_attribute(:remember_token, Users.encrypt(remember_token)) 

这行代码中的 Users.encrypt(remember_token) 应该是 User.encrypt(remember_token),因为没有 Users 这么一个 class,所以提示这是一个未定义的 Constant。

#5 楼 @lgn21st 谢了,问题解决了

#4 楼 @lgn21st 怎么有点传销的感觉

#5 楼 @lgn21st 您好 想问您一个关于路由的问题

#10 楼 @jhunter 有问题你应该直接把问题作为一个新的帖子发出,这样会有很多人帮你回答的。

#1 楼 @lgn21st 我发了问题可是没人回我老师

需要 登录 后方可回复, 如果你还没有账号请 注册新账号