Fil*_*pos 4 self getter-setter ruby-on-rails-3
我对Rails 3应用程序控制器或帮助程序中的setter和getter的可用性有点困惑.为什么有人会在控制器方法(或模块)中使用setter和getter而不仅仅是实例变量.有人能举个例子吗?使用制定者和吸气剂是明智的吗?什么时候需要?
例如,Michael Hartl的Rubby on Rails 3 Tutorial,它说(第347页):
模块SessionsHelper
def current_user=(user)
@current_user = user
end
def current_user
@current_user ||= user_from_remember_token
end
Run Code Online (Sandbox Code Playgroud)
为什么不@current_user首先使用.
我的第二个问题是在控制器方法中self的含义是什么.例如:
Class SessionsController < ApplicationController
def sign_in?
cookies.permanent.signed[:remember_token] = [user.id, user.salt]
self.current_user= user
end
end
Run Code Online (Sandbox Code Playgroud)
我知道User模型类中的self指的是用户本身但是当它在控制器内时它指的是什么?任何例子?
谢谢
在控制器内部,self指控制器本身.所以,当你说self.current_user = user,你正在调用current_user=控制器(如SessionsHelper模块中所定义的那样,我假设它正确包含在内).
由于一些原因,这种技术有点清洁.
user_from_remember_token第一次current_user调用时计算结果,但是@current_user否则返回实例变量的缓存结果.current_user在控制器上从某个其他对象调用.访问另一个对象上的实例变量很尴尬,因为这应该是内部状态(打算通过上面的方法current_user和current_user=方法修改).| 归档时间: |
|
| 查看次数: |
2563 次 |
| 最近记录: |