2012-06-04 79 views
0

在这本书中: http://ruby.railstutorial.org/chapters/updating-showing-and-deleting-users#code:current_user_p比较变量起作用

笔者做如下:

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

    def current_user?(user) 
    user == current_user 
    end 

我的问题是当有一个比较,用户== CURRENT_USER;什么是轨道比较?用户== @current_user?或user.name == @ current_user.name?

,如果我有以下

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

将SER == CURRENT_USER比较other_user什么会hapen?

回答

2

user == current_user中的current_user是对current_user方法的调用,在ruby中,一个方法返回最后执行的语句。因此在该示例中,@current_user正在与user进行比较。

如果添加@other_usercurrent_user方法,那么你在想,user == current_user会比较用户@other_user正确。

1

@current_user→实例变量
current_user→方法

所以current_user?方法比较current_user(方法)的返回值返回给user参数。

这里是完全相同的代码,但略有不同的名称:

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

def is_current_user?(user) 
    user == get_current_user 
end