在Michael Hartl的Ruby on Rails教程中使用current_user setter?

时间:2014-01-03 04:27:29

标签: ruby-on-rails railstutorial.org

我在这里有点困惑。在神话般的Ruby on Rails Tutorial Michael Hartl 第8章中,我无法弄清楚为什么迈克尔使用setter设置实例变量@current_useruser

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

这只是因为实施定位器是最佳做法,还是我没有得到什么?

3 个答案:

答案 0 :(得分:2)

这只是一个OO问题。因为current_user=是会议与世界签订合同的一部分。无论用户最终存储在何处(例如User.current_user),您都可以随时通过该界面进行设置。

答案 1 :(得分:0)

我还没读过,但他可能

  • 提出意见
  • 遵循最佳做法
  • 打算在本教程的前面或后面的其他地方使用setter

答案 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