@current_user
到user
。
module SessionsHelper
def sign_in(user)
remember_token = User.new_remember_token
cookies.permanent[:remember_token] = remember_token
user.update_attribute(:remember_token, User.encrypt(remember_token))
self.current_user = user
end
def current_user=(user)
@current_user = user
end
end
为什么他不只是跳过setter方法而是这样做呢?
module SessionsHelper
def sign_in(user)
remember_token = User.new_remember_token
cookies.permanent[:remember_token] = remember_token
user.update_attribute(:remember_token, User.encrypt(remember_token))
@current_user = user
end
end
这只是因为实施定位器是最佳做法,还是我没有得到什么?
答案 0 :(得分:2)
这只是一个OO问题。因为current_user=
是会议与世界签订合同的一部分。无论用户最终存储在何处(例如User.current_user
),您都可以随时通过该界面进行设置。
答案 1 :(得分:0)
我还没读过,但他可能
答案 2 :(得分:0)
我很确定稍后当用户加载另一个页面时,他会重用该方法。类似的东西:
# in application_controller
before_filter :authenticate
private
def authenticate
if cookies[:remember_token]
self.current_user = User.authenticate(cookies[:remember_token])
end
end
# in user.rb
def self.authenticate(token)
find_by_remember_token(User.encrypt(token))
end