gpt4 book ai didi

ruby-on-rails-3 - Ruby on Rails 3 : Setters and Getters and self inside a controller method

转载 作者:行者123 更新时间:2023-12-04 07:08:27 25 4
gpt4 key购买 nike

我对 Rails 3 应用程序 Controller 或助手中的 setter 和 getter 的可用性有点困惑。
为什么有人会在 Controller 方法(或模块)中使用 setter 和 getter 而不仅仅是实例变量。有人可以举个例子吗?
使用 setter 和 getter 是否明智?什么时候需要?

例如,Michael Hartl 的 Ruby on Rails 3 教程,它说(第 347 页):

模块 SessionsHelper

def current_user=(user)
@current_user = user
end

def current_user
@current_user ||= user_from_remember_token
end

为什么不直接使用 @current_user首先。

我的第二个问题是 Controller 方法中 self 的含义是什么。
例如:
Class SessionsController < ApplicationController

def sign_in?
cookies.permanent.signed[:remember_token] = [user.id, user.salt]
self.current_user= user
end

end

我知道 User 模型类中的 self 是指用户本身
但是当它在 Controller 内部时,它指的是什么?
有什么例子吗?

谢谢

最佳答案

在 Controller 内部,self指的是 Controller 本身。所以当你说 self.current_user = user ,您调用current_user=在 Controller 上(如 SessionsHelper 模块中定义的那样,我假设它被正确包含)。

由于几个原因,这种技术有点清洁。

  • 它允许您在读取或分配当前用户时添加额外的逻辑,如果您需要在以后的时间点这样做。直接使用实例变量不提供这样的扩展点。
  • 它允许 user_from_remember_token 的结果第一次计算current_user被调用,但实例变量 @current_user 的缓存结果否则将被退回。
  • current_user 可能是可取的从其他对象在 Controller 上调用。访问另一个对象上的实例变量很尴尬,因为这应该是内部状态(打算通过上面的 current_usercurrent_user= 方法进行修改)。
  • 关于ruby-on-rails-3 - Ruby on Rails 3 : Setters and Getters and self inside a controller method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6892454/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com