【问题标题】:Use of current_user setter in Ruby on Rails Tutorial by Michael Hartl?Michael Hartl 在 Ruby on Rails 教程中使用 current_user 设置器?
【发布时间】:2014-01-10 07:25:40
【问题描述】:

我在这里有点困惑。在 Michael Hartl 的精彩 Ruby on Rails Tutorial第 8 章中,我不明白为什么 Michael 使用 setter 将实例变量 @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

仅仅是因为实现 setter 是最佳实践还是我什么都没有?

【问题讨论】:

    标签: ruby-on-rails railstutorial.org


    【解决方案1】:

    这只是一个面向对象的问题。因为current_user= 是会话与世界契约的一部分。很有希望的是,无论用户最终存储在哪里(例如User.current_user),您始终可以通过该接口进行设置。

    【讨论】:

      【解决方案2】:

      我没看过,但他可能是

      • 提出观点
      • 遵循最佳实践
      • 打算在本教程之前或之后的其他地方使用 setter

      【讨论】:

        【解决方案3】:

        我很确定他稍后会在用户加载另一个页面时重用该方法。比如:

        # 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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-08-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-01-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多