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

clawhammer · June 10, 2013 · Last by freelove replied at June 11, 2013 · 3975 hits

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

Unknow user #8 June 11, 2013

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

Unknow user #9 June 11, 2013

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

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

11 Floor has deleted
You need to Sign in before reply, if you don't have an account, please Sign up first.