比较变量与功能

时间:2012-06-04 00:14:49

标签: ruby-on-rails ruby

在这本书中: 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

我的问题是当有比较时,user == current_user;什么是rails比较? 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?

2 个答案:

答案 0 :(得分:2)

current_user中的user == current_user是对current_user方法的调用,而在ruby中,方法返回最后执行的语句。因此,在示例中,@current_useruser进行了比较。

如果您将@other_user添加到current_user方法,那么您认为user == current_user会将用户与@other_user进行比较是正确的。

答案 1 :(得分: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