Rails应用程序变量生命周期问题

时间:2010-07-12 11:54:28

标签: ruby-on-rails ruby variables

假设我在应用程序中有一个全局变量用户....就像这样:

  # 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属于哪个请求?谢谢。

2 个答案:

答案 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将因服务器独立的每个请求句柄而不同