Rails 新手问题 Ruby on Rails Tutorial chapter 8 sign_in 和 current_user

clawhammer · 2013年06月10日 · 最后由 freelove 回复于 2013年06月11日 · 3980 次阅读

Rails 初哥的问题,Ruby on Rails Tutorial 第八章里面有一个 sign_in 方法,作用是:

1 创建一个带有 remember_token 的 cookie 2 创建一个 current_user 可以在 controller 和 views 里面调用 3 创建一个 @current_user 变量保存登陆 user 的状态

我现在碰到的问题是: 1 current_user 在 views 里面无法调用。<%= current_user.name %> 2 @current_user 在 views 里面是 nil

和书本上的代码对照都一样,但是就是不能工作。这个问题有点奔溃。

def create
    @user = User.find_by_email(params[:session][:email])
    if @user && @user.authenticate(params[:session][:password])
      sign_in @user
      redirect_to @user
    else
      flash.now[:error] = "Invalid email/password combination"
      render "new"
    end
  end

module SessionHelper
def sign_in(user)
 cookies[:remember_token] = user.remember_token
 self.current_user = user
end

def current_user=(user)
 @current_user = user
end

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

能把整个 app 推上 github 让大家看看不...

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

我发现直接写 current_user 这个 method 就已经可以在 views 里面直接调用了,不明白为什么还要写一个 setter 和 getter method.

浏览器里的 cookies 清除了没有?

#4 楼 @clawhammer def current_user 就是 getter 吧。 我感觉 setter 貌似不太需要,因为其他地方好像用不到,可以直接在 sign_in 里写@current_user = user

你看一下你的session_controller中肯定有写错的地方,还有第一要删除第一个没有密码的用户,如果不删除,在你测试:登录、退出功能的时候你会更抓狂。

匿名 #8 2013年06月11日

改成这样,试试 @user = User.find_by_email([:email]) if @user && @user.authenticate([:password])

匿名 #9 2013年06月11日

主要是 session 的原理了解,细节的问题自然就明白了

谢谢各位,原来的代码是可以 work 的。很奇怪似乎是我重启 server 后的结果

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