假设我在应用程序中有一个全局变量用户....就像这样:
# GET /users.xml
def index
@users = User.all
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @users }
end
end
这是否意味着每个请求,都会创建一个新的@user?如果每个请求,一个对象被创建,什么时候会被销毁?此外,如果vistorA进入网站,则会创建一个@userA,并且vistorB会进入网站@userB。 vistorA是否有机会获得vistorB的对象(@userB)?此外,对象什么时候会释放?谢谢。
****更新:@users不是全局变量,它是一个实例变量。所以,要跟进一个问题。服务器如何知道哪个@user属于哪个请求?谢谢。
答案 0 :(得分:5)
@users
不是全局变量,而是instance variable。创建了一个新的控制器实例来处理每个请求,因此访问者A和访问者B的@users
是独立的。
答案 1 :(得分:1)
1] @users不是全局变量,它是一个实例变量。只有scopre才能保持该方法。
def index
@some_variable= "Hello"
other_method
redirect_to :action=>'redirect_method'
end
def other_method
#here you get @some_variable ="Hello" as you called this method in index where variable is initialise
end
def redirect_method
#here you get @some_variable as you not called this method in index but redirected to this method
end
对于每个用户来说,2] @users将因服务器独立的每个请求句柄而不同