我目前正在处理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
答案 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