Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于同名ruby方法的帮助_Ruby_Ruby On Rails 3 - Fatal编程技术网

关于同名ruby方法的帮助

关于同名ruby方法的帮助,ruby,ruby-on-rails-3,Ruby,Ruby On Rails 3,我目前正在通过r]进行工作,我很难理解当前两种用户方法之间的区别。在我的另一个方法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.curre

我目前正在通过r]进行工作,我很难理解当前两种用户方法之间的区别。在我的另一个方法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

当您指定对象的当前用户属性时,将调用
current\u user=
方法;当您不指定对象的当前用户属性时,将调用
current\u user
方法


因此,
self.current\u user=user
调用
current\u user=
while
!当前用户.nil?
调用
当前用户

区别在于
当前用户=
实现了相等运算符。因此,当您执行
current\u user=something
时,它实际上是在调用
current\u user=(something)

与当前用户相反,当前用户只是一个“获取者”


我读过Ruby访问器。

这是赋值方法

obj.current\u user=some\u user\u object
调用以下方法

  def current_user=(user)
    @current_user = user
  end
  def current_user
    @current_user ||= user_from_remember_token
  end
下面的方法返回当前用户的对象。如果@current_user为null,它将为其分配用户对象并返回它

some\u user=obj。当前用户调用以下方法

  def current_user=(user)
    @current_user = user
  end
  def current_user
    @current_user ||= user_from_remember_token
  end

如果我只是在调用
,我甚至需要
current\u user=
方法吗!当前用户。无?
?因为
current\u user
方法不检索用户,或者只是将
@current\u user
设置为nil。@凯文:如果登录被修改为分配给@current\u user,那么您可以在该代码中删除current\u user=方法。但是如果您想创建“模拟”用户的功能,您会发现current_user=非常有用—您以自己的身份登录,但假装是其他人。(此功能有助于调试客户支持问题。)