帮助使用相同名称的ruby方法

时间:2011-03-21 04:37:54

标签: ruby ruby-on-rails-3

我目前正在处理http://ruby.railstutorial.org/chapters/sign-in-sign-out#sec:current_use r] 1,我无法理解两个current_user方法之间的区别。在我的另一个方法sign_in中有一个调用self.current_user但我无法理解调用哪个current_user以及其他current_user方法实际上在做什么。

module SessionsHelper
  def sign_in(user)
    cookies.permanent.signed[:remember_token] = [user.id, user.salt]
    self.current_user = user
  end

  def current_user=(user)
    @current_user = user
  end

  def current_user
    @current_user ||= user_from_remember_token
  end

  def signed_in?
    !current_user.nil?
  end

  private
    def user_from_remember_token
      # using the * makes us pass two values [id,salt]
      User.authenticate_with_salt(*remember_token)
    end

    def remember_token
      cookies.signed[:remember_token] || [nil,nil]
    end
end

3 个答案:

答案 0 :(得分:1)

分配给对象的current_user属性时会调用current_user=方法,而不会调用current_user方法。

所以self.current_user = user调用current_user=!current_user.nil?调用current_user

答案 1 :(得分:0)

不同之处在于current_user=实现了相等的运算符。因此,当您执行current_user = something时,它实际上是在调用current_user=(something)

current_user相反,{{1}}只是一个'吸气'。

我在Ruby Accessors上阅读了this article

答案 2 :(得分:0)

这是分配方法。

一样使用

obj.current_user= some_user_object调用以下方法。

  def current_user=(user)
    @current_user = user
  end

以下方法返回对象当前用户。如果@current_user为null,它将为其分配用户对象并将其返回。

some_user=obj.current_user调用以下方法。

  def current_user
    @current_user ||= user_from_remember_token
  end